home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 52
/
Amiga Format AFCD52 (Issue 136, May 2000).iso
/
-serious-
/
programming
/
other
/
jikes-1.11
/
src
/
javaact.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
2000-02-23
|
110KB
|
4,577 lines
#line 427 "java.g"
//
// This software is subject to the terms of the IBM Jikes Compiler Open
// Source License Agreement available at the following URL:
// http://www.ibm.com/research/jikes.
// Copyright (C) 1996, 1998, International Business Machines Corporation
// and others. All Rights Reserved.
// You must accept the terms of that agreement to use this software.
//
#include "config.h"
#include "parser.h"
#include "ast.h"
#undef HEADERS
#include "javaact.h"
//****************************************************************************//
//****************************************************************************//
//* *//
//* Below, we show each rule of the Java grammar together with the semantic *//
//* action that is invoked when the parser performs a reduction by that rule.*//
//* *//
//****************************************************************************//
//****************************************************************************//
//
// Rule 1: Goal -> CompilationUnit
//
#line 459 "java.g"
//
// Given a rule of the form A ::= x1 x2 ... xn n >= 1
//
// Do nothing - Whatever Ast was produced for x1 is inherited by A.
//
void Parser::BadAction(void) { assert(false); }
void Parser::NoAction(void) {}
//
// Rule 2: Goal ::= BodyMarker ConstructorBody
//
#line 471 "java.g"
//
// This rule was added to allow the parser to recognize the body of a
// funtion (constructor or method, as the definition of the body of a
// method is subsumed by the definition of the body of a constructor)
// out of context. Note that the artificial terminal BodyMarker is
// added here to prevent an ordinary parse from accepting a body as
// a valid input - i.e., to recognize a body out-of-context, the
// BodyMarker terminal must be inserted in front of the input stream
// containing the body in question.
//
void Parser::Act2(void)
{
Sym(1) = Sym(2);
}
//
// Rule 3: Literal ::= IntegerLiteral
//
#line 496 "java.g"
void Parser::Act3(void)
{
Sym(1) = ast_pool -> NewIntegerLiteral(Token(1));
}
//
// Rule 4: Literal ::= LongLiteral
//
#line 505 "java.g"
void Parser::Act4(void)
{
Sym(1) = ast_pool -> NewLongLiteral(Token(1));
}
//
// Rule 5: Literal ::= FloatingPointLiteral
//
#line 514 "java.g"
void Parser::Act5(void)
{
Sym(1) = ast_pool -> NewFloatingPointLiteral(Token(1));
}
//
// Rule 6: Literal ::= DoubleLiteral
//
#line 523 "java.g"
void Parser::Act6(void)
{
Sym(1) = ast_pool -> NewDoubleLiteral(Token(1));
}
//
// Rule 7: Literal -> BooleanLiteral
//
// void NoAction(void);
//
//
// Rule 8: Literal ::= CharacterLiteral
//
#line 536 "java.g"
void Parser::Act8(void)
{
Sym(1) = ast_pool -> NewCharacterLiteral(Token(1));
}
//
// Rule 9: Literal ::= StringLiteral
//
#line 545 "java.g"
void Parser::Act9(void)
{
Sym(1) = ast_pool -> NewStringLiteral(Token(1));
}
//
// Rule 10: Literal ::= null
//
#line 554 "java.g"
void Parser::Act10(void)
{
Sym(1) = ast_pool -> NewNullLiteral(Token(1));
}
//
// Rule 11: BooleanLiteral ::= true
//
#line 563 "java.g"
void Parser::Act11(void)
{
Sym(1) = ast_pool -> NewTrueLiteral(Token(1));
}
//
// Rule 12: BooleanLiteral ::= false
//
#line 572 "java.g"
void Parser::Act12(void)
{
Sym(1) = ast_pool -> NewFalseLiteral(Token(1));
}
//
// Rule 13: Type -> PrimitiveType
//
// void NoAction(void);
//
//
// Rule 14: Type -> ReferenceType
//
// void NoAction(void);
//
//
// Rule 15: PrimitiveType -> NumericType
//
// void NoAction(void);
//
//
// Rule 16: PrimitiveType ::= boolean
//
#line 595 "java.g"
void Parser::Act16(void)
{
Sym(1) = ast_pool -> NewPrimitiveType(Ast::BOOLEAN, Token(1));
}
//
// Rule 17: NumericType -> IntegralType
//
// void NoAction(void);
//
//
// Rule 18: NumericType -> FloatingPointType
//
// void NoAction(void);
//
//
// Rule 19: IntegralType ::= byte
//
#line 612 "java.g"
void Parser::Act19(void)
{
Sym(1) = ast_pool -> NewPrimitiveType(Ast::BYTE, Token(1));
}
//
// Rule 20: IntegralType ::= short
//
#line 621 "java.g"
void Parser::Act20(void)
{
Sym(1) = ast_pool -> NewPrimitiveType(Ast::SHORT, Token(1));
}
//
// Rule 21: IntegralType ::= int
//
#line 630 "java.g"
void Parser::Act21(void)
{
Sym(1) = ast_pool -> NewPrimitiveType(Ast::INT, Token(1));
}
//
// Rule 22: IntegralType ::= long
//
#line 639 "java.g"
void Parser::Act22(void)
{
Sym(1) = ast_pool -> NewPrimitiveType(Ast::LONG, Token(1));
}
//
// Rule 23: IntegralType ::= char
//
#line 648 "java.g"
void Parser::Act23(void)
{
Sym(1) = ast_pool -> NewPrimitiveType(Ast::CHAR, Token(1));
}
//
// Rule 24: FloatingPointType ::= float
//
#line 657 "java.g"
void Parser::Act24(void)
{
Sym(1) = ast_pool -> NewPrimitiveType(Ast::FLOAT, Token(1));
}
//
// Rule 25: FloatingPointType ::= double
//
#line 666 "java.g"
void Parser::Act25(void)
{
Sym(1) = ast_pool -> NewPrimitiveType(Ast::DOUBLE, Token(1));
}
//
// Rule 26: ReferenceType -> ClassOrInterfaceType
//
// void NoAction(void);
//
//
// Rule 27: ReferenceType -> ArrayType
//
// void NoAction(void);
//
//
// Rule 28: ClassOrInterfaceType -> Name
//
// void NoAction(void);
//
//
// Rule 29: ArrayType ::= PrimitiveType Dims
//
#line 695 "java.g"
void Parser::MakeArrayType(void)
{
AstArrayType *p = ast_pool -> NewArrayType();
p -> type = Sym(1);
//
// The list of modifiers is guaranteed not empty
//
{
AstListNode *tail = (AstListNode *) Sym(2);
p -> AllocateBrackets(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddBrackets((AstBrackets *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
Sym(1) = p;
}
//
// Rule 30: ArrayType ::= Name Dims
//
// void MakeArrayType(void);
//
//
// Rule 31: ClassType -> ClassOrInterfaceType
//
// void NoAction(void);
//
//
// Rule 32: InterfaceType -> ClassOrInterfaceType
//
// void NoAction(void);
//
//
// Rule 33: Name -> SimpleName
//
// void NoAction(void);
//
//
// Rule 34: Name -> QualifiedName
//
// void NoAction(void);
//
//
// Rule 35: SimpleName ::= Identifier
//
#line 745 "java.g"
void Parser::MakeSimpleName(void)
{
Sym(1) = ast_pool -> NewSimpleName(Token(1));
}
//
// Rule 36: QualifiedName ::= Name DOT Identifier
//
#line 754 "java.g"
void Parser::MakeFieldAccess(void)
{
AstFieldAccess *p = ast_pool -> NewFieldAccess();
p -> base = (AstExpression *) Sym(1);
p -> dot_token = Token(2);
p -> identifier_token = Token(3);
Sym(1) = p;
}
//
// Rule 37: CompilationUnit ::= PackageDeclarationopt ImportDeclarationsopt TypeDeclarationsopt
//
#line 769 "java.g"
void Parser::Act37(void)
{
AstCompilationUnit *p = ast_pool -> NewCompilationUnit();
p -> package_declaration_opt = (AstPackageDeclaration *) Sym(1);
if (Sym(2) != NULL)
{
AstListNode *tail = (AstListNode *) Sym(2);
p -> AllocateImportDeclarations(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddImportDeclaration((AstImportDeclaration *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
if (Sym(3) != NULL)
{
AstListNode *tail = (AstListNode *) Sym(3);
p -> AllocateTypeDeclarations(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddTypeDeclaration(root -> element);
} while(root != tail);
FreeCircularList(tail);
}
Sym(1) = p;
}
//
// Rule 38: ImportDeclarations ::= ImportDeclaration
//
#line 804 "java.g"
//
// Note that the list is circular so as to preserve the order of the elements
//
void Parser::Act38(void)
{
AstListNode *p = AllocateListNode();
p -> next = p;
p -> element = Sym(1);
p -> index = 0;
Sym(1) = p;
}
//
// Rule 39: ImportDeclarations ::= ImportDeclarations ImportDeclaration
//
#line 821 "java.g"
//
// Note that the list is circular so as to preserve the order of the elements
//
void Parser::Act39(void)
{
AstListNode *tail = (AstListNode *) Sym(1);
AstListNode *p = AllocateListNode();
p -> element = Sym(2);
p -> index = tail -> index + 1;
p -> next = tail -> next;
tail -> next = p;
Sym(1) = p;
}
//
// Rule 40: TypeDeclarations ::= TypeDeclaration
//
#line 842 "java.g"
//
// Note that the list is circular so as to preserve the order of the elements
//
void Parser::Act40(void)
{
AstListNode *p = AllocateListNode();
p -> next = p;
p -> element = Sym(1);
p -> index = 0;
Sym(1) = p;
}
//
// Rule 41: TypeDeclarations ::= TypeDeclarations TypeDeclaration
//
#line 859 "java.g"
//
// Note that the list is circular so as to preserve the order of the elements
//
void Parser::Act41(void)
{
AstListNode *tail = (AstListNode *) Sym(1);
AstListNode *p = AllocateListNode();
p -> element = Sym(2);
p -> index = tail -> index + 1;
p -> next = tail -> next;
tail -> next = p;
Sym(1) = p;
}
//
// Rule 42: PackageDeclaration ::= package Name PackageHeaderMarker SEMICOLON
//
#line 880 "java.g"
void Parser::Act42(void)
{
AstPackageDeclaration *p = ast_pool -> NewPackageDeclaration();
p -> package_token = Token(1);
p -> name = (AstExpression *) Sym(2);
p -> semicolon_token = Token(3);
Sym(1) = p;
}
//
// Rule 43: ImportDeclaration -> SingleTypeImportDeclaration
//
// void NoAction(void);
//
//
// Rule 44: ImportDeclaration -> TypeImportOnDemandDeclaration
//
// void NoAction(void);
//
//
// Rule 45: SingleTypeImportDeclaration ::= import Name SEMICOLON
//
#line 901 "java.g"
void Parser::Act45(void)
{
AstImportDeclaration *p = ast_pool -> NewImportDeclaration();
p -> import_token = Token(1);
p -> name = (AstExpression *) Sym(2);
p -> star_token_opt = 0;
p -> semicolon_token = Token(3);
Sym(1) = p;
}
//
// Rule 46: TypeImportOnDemandDeclaration ::= import Name DOT MULTIPLY SEMICOLON
//
#line 915 "java.g"
void Parser::Act46(void)
{
AstImportDeclaration *p = ast_pool -> NewImportDeclaration();
p -> import_token = Token(1);
p -> name = (AstExpression *) Sym(2);
p -> star_token_opt = Token(4);
p -> semicolon_token = Token(5);
Sym(1) = p;
}
//
// Rule 47: TypeDeclaration -> ClassDeclaration
//
// void NoAction(void);
//
//
// Rule 48: TypeDeclaration -> InterfaceDeclaration
//
// void NoAction(void);
//
//
// Rule 49: TypeDeclaration ::= SEMICOLON
//
#line 937 "java.g"
void Parser::Act49(void)
{
Sym(1) = ast_pool -> NewEmptyDeclaration(Token(1));
}
//
// Rule 50: Modifiers ::= Modifier
//
#line 948 "java.g"
//
// Note that the list is circular so as to preserve the order of the elements
//
void Parser::Act50(void)
{
AstListNode *p = AllocateListNode();
p -> next = p;
p -> element = Sym(1);
p -> index = 0;
Sym(1) = p;
}
//
// Rule 51: Modifiers ::= Modifiers Modifier
//
#line 965 "java.g"
//
// Note that the list is circular so as to preserve the order of the elements
//
void Parser::Act51(void)
{
AstListNode *tail = (AstListNode *) Sym(1);
AstListNode *p = AllocateListNode();
p -> element = Sym(2);
p -> index = tail -> index + 1;
p -> next = tail -> next;
tail -> next = p;
Sym(1) = p;
}
//
// Rule 52: Modifier ::= public
//
#line 986 "java.g"
void Parser::Act52(void)
{
Sym(1) = ast_pool -> NewModifier(Ast::PUBLIC, Token(1));
}
//
// Rule 53: Modifier ::= protected
//
#line 995 "java.g"
void Parser::Act53(void)
{
Sym(1) = ast_pool -> NewModifier(Ast::PROTECTED, Token(1));
}
//
// Rule 54: Modifier ::= private
//
#line 1004 "java.g"
void Parser::Act54(void)
{
Sym(1) = ast_pool -> NewModifier(Ast::PRIVATE, Token(1));
}
//
// Rule 55: Modifier ::= static
//
#line 1013 "java.g"
void Parser::Act55(void)
{
Sym(1) = ast_pool -> NewModifier(Ast::STATIC, Token(1));
}
//
// Rule 56: Modifier ::= abstract
//
#line 1022 "java.g"
void Parser::Act56(void)
{
Sym(1) = ast_pool -> NewModifier(Ast::ABSTRACT, Token(1));
}
//
// Rule 57: Modifier ::= final
//
#line 1031 "java.g"
void Parser::Act57(void)
{
Sym(1) = ast_pool -> NewModifier(Ast::FINAL, Token(1));
}
//
// Rule 58: Modifier ::= native
//
#line 1040 "java.g"
void Parser::Act58(void)
{
Sym(1) = ast_pool -> NewModifier(Ast::NATIVE, Token(1));
}
//
// Rule 59: Modifier ::= strictfp
//
#line 1049 "java.g"
void Parser::Act59(void)
{
Sym(1) = ast_pool -> NewModifier(Ast::STRICTFP, Token(1));
}
//
// Rule 60: Modifier ::= synchronized
//
#line 1058 "java.g"
void Parser::Act60(void)
{
Sym(1) = ast_pool -> NewModifier(Ast::SYNCHRONIZED, Token(1));
}
//
// Rule 61: Modifier ::= transient
//
#line 1067 "java.g"
void Parser::Act61(void)
{
Sym(1) = ast_pool -> NewModifier(Ast::TRANSIENT, Token(1));
}
//
// Rule 62: Modifier ::= volatile
//
#line 1076 "java.g"
void Parser::Act62(void)
{
Sym(1) = ast_pool -> NewModifier(Ast::VOLATILE, Token(1));
}
//
// Rule 63: ClassDeclaration ::= Modifiersopt class Identifier Superopt Interfacesopt ClassBody
//
#line 1092 "java.g"
void Parser::Act63(void)
{
AstClassDeclaration *p = ast_pool -> NewClassDeclaration();
if (Sym(1) != NULL)
{
AstListNode *tail = (AstListNode *) Sym(1);
p -> AllocateClassModifiers(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddClassModifier((AstModifier *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
p -> class_token = Token(2);
p -> identifier_token = Token(3);
p -> super_opt = (AstExpression *) Sym(4);
if (Sym(5) != NULL)
{
AstListNode *tail = (AstListNode *) Sym(5);
p -> AllocateInterfaces(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddInterface((AstExpression *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
p -> class_body = (AstClassBody *) Sym(6);
Sym(1) = p;
}
//
// Rule 64: Super ::= extends ClassType
//
#line 1130 "java.g"
void Parser::SetSym1ToSym2(void) { Sym(1) = Sym(2); }
//
// Rule 65: Interfaces ::= implements InterfaceTypeList
//
// void SetSym1ToSym2(void);
//
//
// Rule 66: InterfaceTypeList ::= InterfaceType
//
#line 1143 "java.g"
//
// Note that the list is circular so as to preserve the order of the elements
//
void Parser::Act66(void)
{
AstListNode *p = AllocateListNode();
p -> next = p;
p -> element = Sym(1);
p -> index = 0;
Sym(1) = p;
}
//
// Rule 67: InterfaceTypeList ::= InterfaceTypeList COMMA InterfaceType
//
#line 1160 "java.g"
//
// Note that the list is circular so as to preserve the order of the elements
//
void Parser::Act67(void)
{
AstListNode *tail = (AstListNode *) Sym(1);
AstListNode *p = AllocateListNode();
p -> element = Sym(3);
p -> index = tail -> index + 1;
p -> next = tail -> next;
tail -> next = p;
Sym(1) = p;
}
//
// Rule 68: ClassBody ::= LBRACE ClassBodyDeclarationsopt RBRACE
//
#line 1181 "java.g"
void Parser::Act68(void)
{
AstClassBody *p = ast_pool -> NewClassBody();
if (parse_header_only)
p -> mark_unparsed();
p -> left_brace_token = Token(1);
if (Sym(2) != NULL)
{
int num_instance_variables = 0,
num_class_variables = 0,
num_methods = 0,
num_constructors = 0,
num_static_initializers = 0,
num_inner_classes = 0,
num_inner_interfaces = 0,
num_blocks = 0,
num_empty_declarations = 0;
AstListNode *tail = (AstListNode *) Sym(2);
p -> AllocateClassBodyDeclarations(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddClassBodyDeclaration(root -> element);
AstFieldDeclaration *field_declaration = root -> element -> FieldDeclarationCast();
if (field_declaration)
{
for (int i = 0; i < field_declaration -> NumVariableModifiers(); i++)
{
if (field_declaration -> VariableModifier(i) -> kind == Ast::STATIC)
{
field_declaration -> MarkStatic();
break;
}
}
if (field_declaration -> StaticFieldCast())
num_class_variables++;
else num_instance_variables++;
}
else if (root -> element -> MethodDeclarationCast())
{
num_methods++;
}
else if (root -> element -> ConstructorDeclarationCast())
{
num_constructors++;
}
else if (root -> element -> StaticInitializerCast())
{
num_static_initializers++;
}
else if (root -> element -> ClassDeclarationCast())
{
num_inner_classes++;
}
else if (root -> element -> InterfaceDeclarationCast())
{
num_inner_interfaces++;
}
else if (root -> element -> BlockCast())
{
num_blocks++;
}
else num_empty_declarations++;
} while(root != tail);
p -> AllocateInstanceVariables(num_instance_variables);
p -> AllocateClassVariables(num_class_variables);
p -> AllocateMethods(num_methods);
p -> AllocateConstructors(num_constructors);
p -> AllocateStaticInitializers(num_static_initializers);
p -> AllocateNestedClasses(num_inner_classes);
p -> AllocateNestedInterfaces(num_inner_interfaces);
p -> AllocateBlocks(num_blocks);
p -> AllocateEmptyDeclarations(num_empty_declarations);
root = tail;
do
{
root = root -> next;
AstFieldDeclaration *field_declaration;
AstMethodDeclaration *method_declaration;
AstConstructorDeclaration *constructor_declaration;
AstStaticInitializer *static_initializer;
AstClassDeclaration *class_declaration;
AstInterfaceDeclaration *interface_declaration;
AstBlock *block;
if ((field_declaration = root -> element -> FieldDeclarationCast()))
{
if (field_declaration -> StaticFieldCast())
p -> AddClassVariable(field_declaration);
else p -> AddInstanceVariable(field_declaration);
}
else if ((method_declaration = root -> element -> MethodDeclarationCast()))
{
p -> AddMethod(method_declaration);
}
else if ((constructor_declaration = root -> element -> ConstructorDeclarationCast()))
{
p -> AddConstructor(constructor_declaration);
}
else if ((static_initializer = root -> element -> StaticInitializerCast()))
{
p -> AddStaticInitializer(static_initializer);
}
else if ((class_declaration = root -> element -> ClassDeclarationCast()))
{
p -> AddNestedClass(class_declaration);
}
else if ((interface_declaration = root -> element -> InterfaceDeclarationCast()))
{
p -> AddNestedInterface(interface_declaration);
}
else if ((block = root -> element -> BlockCast()))
{
p -> AddBlock(block);
}
else // assert(block = root -> element -> EmptyDeclarationCast())
{
p -> AddEmptyDeclaration((AstEmptyDeclaration *) root -> element);
}
} while(root != tail);
FreeCircularList(tail);
}
p -> right_brace_token = Token(3);
p -> pool = body_pool; // from now on, this is the storage pool to use for this type
Sym(1) = p;
}
//
// Rule 69: ClassBodyDeclarations ::= ClassBodyDeclaration
//
#line 1319 "java.g"
//
// Note that the list is circular so as to preserve the order of the elements
//
void Parser::Act69(void)
{
AstListNode *p = AllocateListNode();
p -> next = p;
p -> element = Sym(1);
p -> index = 0;
Sym(1) = p;
}
//
// Rule 70: ClassBodyDeclarations ::= ClassBodyDeclarations ClassBodyDeclaration
//
#line 1336 "java.g"
//
// Note that the list is circular so as to preserve the order of the elements
//
void Parser::Act70(void)
{
AstListNode *tail = (AstListNode *) Sym(1);
AstListNode *p = AllocateListNode();
p -> element = Sym(2);
p -> index = tail -> index + 1;
p -> next = tail -> next;
tail -> next = p;
Sym(1) = p;
}
//
// Rule 71: ClassBodyDeclaration -> ClassMemberDeclaration
//
// void NoAction(void);
//
//
// Rule 72: ClassBodyDeclaration -> StaticInitializer
//
// void NoAction(void);
//
//
// Rule 73: ClassBodyDeclaration -> ConstructorDeclaration
//
// void NoAction(void);
//
//
// Rule 74: ClassBodyDeclaration ::= MethodHeaderMarker Block
//
#line 1370 "java.g"
void Parser::Act74(void)
{
Sym(1) = Sym(2);
}
//
// Rule 75: ClassMemberDeclaration -> FieldDeclaration
//
// void NoAction(void);
//
//
// Rule 76: ClassMemberDeclaration -> MethodDeclaration
//
// void NoAction(void);
//
//
// Rule 77: ClassMemberDeclaration -> ClassDeclaration
//
// void NoAction(void);
//
//
// Rule 78: ClassMemberDeclaration -> InterfaceDeclaration
//
// void NoAction(void);
//
//
// Rule 79: ClassMemberDeclaration ::= SEMICOLON
//
#line 1404 "java.g"
void Parser::Act79(void)
{
Sym(1) = ast_pool -> NewEmptyDeclaration(Token(1));
}
//
// Rule 80: FieldDeclaration ::= Modifiersopt Type VariableDeclarators SEMICOLON
//
#line 1423 "java.g"
void Parser::Act80(void)
{
AstFieldDeclaration *p = ast_pool -> NewFieldDeclaration();
if (Sym(1) != NULL)
{
AstListNode *tail = (AstListNode *) Sym(1);
p -> AllocateVariableModifiers(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddVariableModifier((AstModifier *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
p -> type = Sym(2);
//
// The list of declarators is guaranteed not empty
//
{
AstListNode *tail = (AstListNode *) Sym(3);
p -> AllocateVariableDeclarators(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddVariableDeclarator((AstVariableDeclarator *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
p -> semicolon_token = Token(4);
Sym(1) = p;
}
//
// Rule 81: VariableDeclarators ::= VariableDeclarator
//
#line 1461 "java.g"
//
// Note that the list is circular so as to preserve the order of the elements
//
void Parser::Act81(void)
{
AstListNode *p = AllocateListNode();
p -> next = p;
p -> element = Sym(1);
p -> index = 0;
Sym(1) = p;
}
//
// Rule 82: VariableDeclarators ::= VariableDeclarators COMMA VariableDeclarator
//
#line 1478 "java.g"
//
// Note that the list is circular so as to preserve the order of the elements
//
void Parser::Act82(void)
{
AstListNode *tail = (AstListNode *) Sym(1);
AstListNode *p = AllocateListNode();
p -> element = Sym(3);
p -> index = tail -> index + 1;
p -> next = tail -> next;
tail -> next = p;
Sym(1) = p;
}
//
// Rule 83: VariableDeclarator ::= VariableDeclaratorId
//
#line 1499 "java.g"
void Parser::Act83(void)
{
AstVariableDeclarator *p = ast_pool -> NewVariableDeclarator();
p -> variable_declarator_name = (AstVariableDeclaratorId *) Sym(1);
p -> variable_initializer_opt = NULL;
Sym(1) = p;
}
//
// Rule 84: VariableDeclarator ::= VariableDeclaratorId EQUAL VariableInitializer
//
#line 1511 "java.g"
void Parser::Act84(void)
{
AstVariableDeclarator *p = ast_pool -> NewVariableDeclarator();
p -> variable_declarator_name = (AstVariableDeclaratorId *) Sym(1);
p -> variable_initializer_opt = Sym(3);
Sym(1) = p;
}
//
// Rule 85: VariableDeclaratorId ::= Identifier Dimsopt
//
#line 1523 "java.g"
void Parser::Act85(void)
{
AstVariableDeclaratorId *p = ast_pool -> NewVariableDeclaratorId();
p -> identifier_token = Token(1);
if (Sym(2) != NULL)
{
AstListNode *tail = (AstListNode *) Sym(2);
p -> AllocateBrackets(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddBrackets((AstBrackets *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
Sym(1) = p;
}
//
// Rule 86: VariableInitializer -> Expression
//
// void NoAction(void);
//
//
// Rule 87: VariableInitializer -> ArrayInitializer
//
// void NoAction(void);
//
//
// Rule 88: MethodDeclaration ::= MethodHeader MethodHeaderMarker MethodBody
//
#line 1571 "java.g"
void Parser::Act88(void)
{
((AstMethodDeclaration *) Sym(1)) -> method_body = (AstStatement *) Sym(3);
}
//
// Rule 89: MethodHeader ::= Modifiersopt Type MethodDeclarator Throwsopt
//
#line 1580 "java.g"
void Parser::Act89(void)
{
AstMethodDeclaration *p = ast_pool -> NewMethodDeclaration();
if (Sym(1) != NULL)
{
AstListNode *tail = (AstListNode *) Sym(1);
p -> AllocateMethodModifiers(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddMethodModifier((AstModifier *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
p -> type = Sym(2);
p -> method_declarator = (AstMethodDeclarator *) Sym(3);
if (Sym(4) != NULL)
{
AstListNode *tail = (AstListNode *) Sym(4);
p -> AllocateThrows(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddThrow((AstExpression *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
Sym(1) = p;
}
//
// Rule 90: MethodHeader ::= Modifiersopt void MethodDeclarator Throwsopt
//
#line 1616 "java.g"
void Parser::Act90(void)
{
AstMethodDeclaration *p = ast_pool -> NewMethodDeclaration();
if (Sym(1) != NULL)
{
AstListNode *tail = (AstListNode *) Sym(1);
p -> AllocateMethodModifiers(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddMethodModifier((AstModifier *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
p -> type = ast_pool -> NewPrimitiveType(Ast::VOID_TYPE, Token(2));
p -> method_declarator = (AstMethodDeclarator *) Sym(3);
if (Sym(4) != NULL)
{
AstListNode *tail = (AstListNode *) Sym(4);
p -> AllocateThrows(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddThrow((AstExpression *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
Sym(1) = p;
}
//
// Rule 91: MethodDeclarator ::= Identifier LPAREN FormalParameterListopt RPAREN Dimsopt
//
#line 1652 "java.g"
void Parser::Act91(void)
{
AstMethodDeclarator *p = ast_pool -> NewMethodDeclarator();
p -> identifier_token = Token(1);
p -> left_parenthesis_token = Token(2);
if (Sym(3) != NULL)
{
AstListNode *tail = (AstListNode *) Sym(3);
p -> AllocateFormalParameters(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddFormalParameter((AstFormalParameter *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
p -> right_parenthesis_token = Token(4);
if (Sym(5) != NULL)
{
AstListNode *tail = (AstListNode *) Sym(5);
p -> AllocateBrackets(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddBrackets((AstBrackets *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
Sym(1) = p;
}
//
// Rule 92: FormalParameterList ::= FormalParameter
//
#line 1689 "java.g"
//
// Note that the list is circular so as to preserve the order of the elements
//
void Parser::Act92(void)
{
AstListNode *p = AllocateListNode();
p -> next = p;
p -> element = Sym(1);
p -> index = 0;
Sym(1) = p;
}
//
// Rule 93: FormalParameterList ::= FormalParameterList COMMA FormalParameter
//
#line 1706 "java.g"
//
// Note that the list is circular so as to preserve the order of the elements
//
void Parser::Act93(void)
{
AstListNode *tail = (AstListNode *) Sym(1);
AstListNode *p = AllocateListNode();
p -> element = Sym(3);
p -> index = tail -> index + 1;
p -> next = tail -> next;
tail -> next = p;
Sym(1) = p;
}
//
// Rule 94: FormalParameter ::= Type VariableDeclaratorId
//
#line 1727 "java.g"
void Parser::Act94(void)
{
AstFormalParameter *p = ast_pool -> NewFormalParameter();
p -> type = Sym(1);
AstVariableDeclarator *formal_declarator = ast_pool -> NewVariableDeclarator();
formal_declarator -> variable_declarator_name = (AstVariableDeclaratorId *) Sym(2);
formal_declarator -> variable_initializer_opt = NULL;
p -> formal_declarator = formal_declarator;
Sym(1) = p;
}
//
// Rule 95: FormalParameter ::= Modifiers Type VariableDeclaratorId
//
#line 1746 "java.g"
void Parser::Act95(void)
{
AstFormalParameter *p = ast_pool -> NewFormalParameter();
//
// The list of modifiers is guaranteed not empty
//
{
AstListNode *tail = (AstListNode *) Sym(1);
p -> AllocateParameterModifiers(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddParameterModifier((AstModifier *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
p -> type = Sym(2);
AstVariableDeclarator *formal_declarator = ast_pool -> NewVariableDeclarator();
formal_declarator -> variable_declarator_name = (AstVariableDeclaratorId *) Sym(3);
formal_declarator -> variable_initializer_opt = NULL;
p -> formal_declarator = formal_declarator;
Sym(1) = p;
}
//
// Rule 96: Throws ::= throws ClassTypeList
//
// void SetSym1ToSym2(void);
//
//
// Rule 97: ClassTypeList ::= ClassType
//
#line 1786 "java.g"
//
// Note that the list is circular so as to preserve the order of the elements
//
void Parser::Act97(void)
{
AstListNode *p = AllocateListNode();
p -> next = p;
p -> element = Sym(1);
p -> index = 0;
Sym(1) = p;
}
//
// Rule 98: ClassTypeList ::= ClassTypeList COMMA ClassType
//
#line 1803 "java.g"
//
// Note that the list is circular so as to preserve the order of the elements
//
void Parser::Act98(void)
{
AstListNode *tail = (AstListNode *) Sym(1);
AstListNode *p = AllocateListNode();
p -> element = Sym(3);
p -> index = tail -> index + 1;
p -> next = tail -> next;
tail -> next = p;
Sym(1) = p;
}
//
// Rule 99: MethodBody -> Block
//
// void NoAction(void);
//
//
// Rule 100: MethodBody ::= SEMICOLON
//
#line 1828 "java.g"
void Parser::MakeEmptyStatement(void)
{
Sym(1) = ast_pool -> NewEmptyStatement(Token(1));
}
//
// Rule 101: StaticInitializer ::= static MethodHeaderMarker Block
//
#line 1839 "java.g"
void Parser::Act101(void)
{
AstStaticInitializer *p = ast_pool -> NewStaticInitializer();
p -> static_token = Token(1);
p -> block = (AstBlock *) Sym(3);
Sym(1) = p;
}
//
// Rule 102: ConstructorDeclaration ::= Modifiersopt ConstructorDeclarator Throwsopt MethodHeaderMarker ConstructorBody
//
#line 1864 "java.g"
void Parser::Act102(void)
{
AstConstructorBlock *block = Sym(5) -> ConstructorBlockCast();
if (! block)
{
block = ast_pool -> NewConstructorBlock();
block -> left_brace_token = Sym(5) -> LeftToken();
block -> explicit_constructor_invocation_opt = NULL;
block -> block = (AstBlock *) Sym(5);
block -> right_brace_token = Sym(5) -> RightToken();
}
AstConstructorDeclaration *p = ast_pool -> NewConstructorDeclaration();
if (Sym(1) != NULL)
{
AstListNode *tail = (AstListNode *) Sym(1);
p -> AllocateConstructorModifiers(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddConstructorModifier((AstModifier *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
p -> constructor_declarator = (AstMethodDeclarator *) Sym(2);
if (Sym(3) != NULL)
{
AstListNode *tail = (AstListNode *) Sym(3);
p -> AllocateThrows(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddThrow((AstExpression *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
p -> constructor_body = block;
Sym(1) = p;
}
//
// Rule 103: ConstructorDeclarator ::= Identifier LPAREN FormalParameterListopt RPAREN
//
#line 1920 "java.g"
void Parser::Act103(void)
{
AstMethodDeclarator *p = ast_pool -> NewMethodDeclarator();
p -> identifier_token = Token(1);
p -> left_parenthesis_token = Token(2);
if (Sym(3) != NULL)
{
AstListNode *tail = (AstListNode *) Sym(3);
p -> AllocateFormalParameters(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddFormalParameter((AstFormalParameter *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
p -> right_parenthesis_token = Token(4);
Sym(1) = p;
}
//
// Rule 104: ConstructorBody -> Block
//
// void NoAction(void);
//
//
// Rule 105: ConstructorBody ::= LBRACE ExplicitConstructorInvocation BlockStatementsopt RBRACE
//
#line 1955 "java.g"
void Parser::Act105(void)
{
AstBlock *block = ast_pool -> NewBlock();
if (Sym(3) != NULL)
{
AstListNode *tail = (AstListNode *) Sym(3);
block -> AllocateBlockStatements(tail -> index + 1);
AstListNode *root = tail;
block -> left_brace_token = root -> element -> LeftToken();
block -> right_brace_token = tail -> element -> RightToken();
do
{
root = root -> next;
block -> AddStatement((AstStatement *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
else
{
block -> left_brace_token = Token(4);
block -> right_brace_token = Token(4);
}
AstConstructorBlock *p = ast_pool -> NewConstructorBlock();
p -> left_brace_token = Token(1);
p -> explicit_constructor_invocation_opt = Sym(2);
p -> block = block;
p -> right_brace_token = Token(4);
Sym(1) = p;
}
//
// Rule 106: ExplicitConstructorInvocation ::= this LPAREN ArgumentListopt RPAREN SEMICOLON
//
#line 1990 "java.g"
void Parser::Act106(void)
{
AstThisCall *p = ast_pool -> NewThisCall();
p -> base_opt = NULL;
p -> dot_token_opt = 0;
p -> this_token = Token(1);
p -> left_parenthesis_token = Token(2);
if (Sym(3) != NULL)
{
AstListNode *tail = (AstListNode *) Sym(3);
p -> AllocateArguments(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddArgument((AstExpression *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
p -> right_parenthesis_token = Token(4);
p -> semicolon_token = Token(5);
Sym(1) = p;
}
//
// Rule 107: ExplicitConstructorInvocation ::= super LPAREN ArgumentListopt RPAREN SEMICOLON
//
#line 2018 "java.g"
void Parser::Act107(void)
{
AstSuperCall *p = ast_pool -> NewSuperCall();
p -> base_opt = NULL;
p -> dot_token_opt = 0;
p -> super_token = Token(1);
p -> left_parenthesis_token = Token(2);
if (Sym(3) != NULL)
{
AstListNode *tail = (AstListNode *) Sym(3);
p -> AllocateArguments(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddArgument((AstExpression *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
p -> right_parenthesis_token = Token(4);
p -> semicolon_token = Token(5);
Sym(1) = p;
}
//
// Rule 108: ExplicitConstructorInvocation ::= Primary DOT this LPAREN ArgumentListopt RPAREN SEMICOLON
//
#line 2047 "java.g"
void Parser::Act108(void)
{
AstThisCall *p = ast_pool -> NewThisCall();
p -> base_opt = (AstExpression *) Sym(1);
p -> dot_token_opt = Token(2);
p -> this_token = Token(3);
p -> left_parenthesis_token = Token(4);
if (Sym(5) != NULL)
{
AstListNode *tail = (AstListNode *) Sym(5);
p -> AllocateArguments(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddArgument((AstExpression *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
p -> right_parenthesis_token = Token(6);
p -> semicolon_token = Token(7);
Sym(1) = p;
}
//
// Rule 109: ExplicitConstructorInvocation ::= Primary DOT super LPAREN ArgumentListopt RPAREN SEMICOLON
//
#line 2076 "java.g"
void Parser::MakeQualifiedSuper(void)
{
AstSuperCall *p = ast_pool -> NewSuperCall();
p -> base_opt = (AstExpression *) Sym(1);
p -> dot_token_opt = Token(2);
p -> super_token = Token(3);
p -> left_parenthesis_token = Token(4);
if (Sym(5) != NULL)
{
AstListNode *tail = (AstListNode *) Sym(5);
p -> AllocateArguments(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddArgument((AstExpression *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
p -> right_parenthesis_token = Token(6);
p -> semicolon_token = Token(7);
Sym(1) = p;
}
//
// Rule 110: ExplicitConstructorInvocation ::= Name DOT super LPAREN ArgumentListopt RPAREN SEMICOLON
//
// void MakeQualifiedSuper(void);
//
//
// Rule 111: InterfaceDeclaration ::= Modifiersopt interface Identifier ExtendsInterfacesopt InterfaceBody
//
#line 2119 "java.g"
void Parser::Act111(void)
{
AstInterfaceDeclaration *p = (AstInterfaceDeclaration *) Sym(5);
if (Sym(1) != NULL)
{
AstListNode *tail = (AstListNode *) Sym(1);
p -> AllocateInterfaceModifiers(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddInterfaceModifier((AstModifier *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
p -> interface_token = Token(2);
p -> identifier_token = Token(3);
if (Sym(4) != NULL)
{
AstListNode *tail = (AstListNode *) Sym(4);
p -> AllocateExtendsInterfaces(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddExtendsInterface((AstExpression *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
Sym(1) = p;
}
//
// Rule 112: ExtendsInterfaces ::= extends InterfaceTypeList
//
// void SetSym1ToSym2(void);
//
//
// Rule 113: InterfaceBody ::= LBRACE InterfaceMemberDeclarationsopt RBRACE
//
#line 2162 "java.g"
void Parser::Act113(void)
{
AstInterfaceDeclaration *p = ast_pool -> NewInterfaceDeclaration();
if (parse_header_only)
p -> mark_unparsed();
p -> left_brace_token = Token(1);
if (Sym(2) != NULL)
{
int num_class_variables = 0,
num_methods = 0,
num_inner_classes = 0,
num_inner_interfaces = 0,
num_empty_declarations = 0;
AstListNode *tail = (AstListNode *) Sym(2);
p -> AllocateInterfaceMemberDeclarations(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddInterfaceMemberDeclaration(root -> element);
AstFieldDeclaration *field_declaration = root -> element -> FieldDeclarationCast();
if (field_declaration)
{
field_declaration -> MarkStatic();
num_class_variables++;
}
else if (root -> element -> MethodDeclarationCast())
{
num_methods++;
}
else if (root -> element -> ClassDeclarationCast())
{
num_inner_classes++;
}
else if (root -> element -> InterfaceDeclarationCast())
{
num_inner_interfaces++;
}
else num_empty_declarations++;
} while(root != tail);
p -> AllocateClassVariables(num_class_variables);
p -> AllocateMethods(num_methods);
p -> AllocateNestedClasses(num_inner_classes);
p -> AllocateNestedInterfaces(num_inner_interfaces);
p -> AllocateEmptyDeclarations(num_empty_declarations);
root = tail;
do
{
root = root -> next;
AstFieldDeclaration *field_declaration;
AstMethodDeclaration *method_declaration;
AstClassDeclaration *class_declaration;
AstInterfaceDeclaration *interface_declaration;
if ((field_declaration = root -> element -> FieldDeclarationCast()))
{
p -> AddClassVariable(field_declaration);
}
else if ((method_declaration = root -> element -> MethodDeclarationCast()))
{
p -> AddMethod(method_declaration);
}
else if ((class_declaration = root -> element -> ClassDeclarationCast()))
{
p -> AddNestedClass(class_declaration);
}
else if ((interface_declaration = root -> element -> InterfaceDeclarationCast()))
{
p -> AddNestedInterface(interface_declaration);
}
else // assert(interface_declaration = root -> element -> EmptyDeclarationCast())
{
p -> AddEmptyDeclaration((AstEmptyDeclaration *) root -> element);
}
} while(root != tail);
FreeCircularList(tail);
}
p -> right_brace_token = Token(3);
p -> pool = body_pool; // from now on, this is the storage pool to use for this type
Sym(1) = p;
}
//
// Rule 114: InterfaceMemberDeclarations ::= InterfaceMemberDeclaration
//
#line 2254 "java.g"
//
// Note that the list is circular so as to preserve the order of the elements
//
void Parser::Act114(void)
{
AstListNode *p = AllocateListNode();
p -> next = p;
p -> element = Sym(1);
p -> index = 0;
Sym(1) = p;
}
//
// Rule 115: InterfaceMemberDeclarations ::= InterfaceMemberDeclarations InterfaceMemberDeclaration
//
#line 2271 "java.g"
//
// Note that the list is circular so as to preserve the order of the elements
//
void Parser::Act115(void)
{
AstListNode *tail = (AstListNode *) Sym(1);
AstListNode *p = AllocateListNode();
p -> element = Sym(2);
p -> index = tail -> index + 1;
p -> next = tail -> next;
tail -> next = p;
Sym(1) = p;
}
//
// Rule 116: InterfaceMemberDeclaration -> ConstantDeclaration
//
// void NoAction(void);
//
//
// Rule 117: InterfaceMemberDeclaration -> AbstractMethodDeclaration
//
// void NoAction(void);
//
//
// Rule 118: InterfaceMemberDeclaration -> ClassDeclaration
//
// void NoAction(void);
//
//
// Rule 119: InterfaceMemberDeclaration -> InterfaceDeclaration
//
// void NoAction(void);
//
//
// Rule 120: InterfaceMemberDeclaration ::= SEMICOLON
//
#line 2317 "java.g"
void Parser::Act120(void)
{
Sym(1) = ast_pool -> NewEmptyDeclaration(Token(1));
}
//
// Rule 121: ConstantDeclaration -> FieldDeclaration
//
// void NoAction(void);
//
//
// Rule 122: AbstractMethodDeclaration ::= MethodHeader SEMICOLON
//
#line 2330 "java.g"
void Parser::Act122(void)
{
((AstMethodDeclaration *) Sym(1)) -> method_body = ast_pool -> NewEmptyStatement(Token(2));
}
//
// Rule 123: ArrayInitializer ::= LBRACE ,opt RBRACE
//
#line 2347 "java.g"
void Parser::Act123(void)
{
AstArrayInitializer *p = ast_pool -> NewArrayInitializer();
p -> left_brace_token = Token(1);
p -> right_brace_token = Token(3);
Sym(1) = p;
}
//
// Rule 124: ArrayInitializer ::= LBRACE VariableInitializers RBRACE
//
#line 2359 "java.g"
void Parser::Act124(void)
{
AstArrayInitializer *p = ast_pool -> NewArrayInitializer();
p -> left_brace_token = Token(1);
if (Sym(2) != NULL)
{
AstListNode *tail = (AstListNode *) Sym(2);
p -> AllocateVariableInitializers(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddVariableInitializer(root -> element);
} while(root != tail);
FreeCircularList(tail);
}
p -> right_brace_token = Token(3);
Sym(1) = p;
}
//
// Rule 125: ArrayInitializer ::= LBRACE VariableInitializers COMMA RBRACE
//
#line 2383 "java.g"
void Parser::Act125(void)
{
AstArrayInitializer *p = ast_pool -> NewArrayInitializer();
p -> left_brace_token = Token(1);
if (Sym(2) != NULL)
{
AstListNode *tail = (AstListNode *) Sym(2);
p -> AllocateVariableInitializers(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddVariableInitializer(root -> element);
} while(root != tail);
FreeCircularList(tail);
}
p -> right_brace_token = Token(4);
Sym(1) = p;
}
//
// Rule 126: VariableInitializers ::= VariableInitializer
//
#line 2407 "java.g"
//
// Note that the list is circular so as to preserve the order of the elements
//
void Parser::Act126(void)
{
AstListNode *p = AllocateListNode();
p -> next = p;
p -> element = Sym(1);
p -> index = 0;
Sym(1) = p;
}
//
// Rule 127: VariableInitializers ::= VariableInitializers COMMA VariableInitializer
//
#line 2424 "java.g"
//
// Note that the list is circular so as to preserve the order of the elements
//
void Parser::Act127(void)
{
AstListNode *tail = (AstListNode *) Sym(1);
AstListNode *p = AllocateListNode();
p -> element = Sym(3);
p -> index = tail -> index + 1;
p -> next = tail -> next;
tail -> next = p;
Sym(1) = p;
}
//
// Rule 128: Block ::= LBRACE BlockStatementsopt RBRACE
//
#line 2447 "java.g"
void Parser::Act128(void)
{
AstBlock *p = ast_pool -> NewBlock();
p -> left_brace_token = Token(1);
if (Sym(2) != NULL)
{
AstListNode *tail = (AstListNode *) Sym(2);
p -> AllocateBlockStatements(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddStatement((AstStatement *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
p -> right_brace_token = Token(3);
Sym(1) = p;
}
//
// Rule 129: BlockStatements ::= BlockStatement
//
#line 2471 "java.g"
//
// Note that the list is circular so as to preserve the order of the elements
//
void Parser::Act129(void)
{
AstListNode *p = AllocateListNode();
p -> next = p;
p -> element = Sym(1);
p -> index = 0;
Sym(1) = p;
}
//
// Rule 130: BlockStatements ::= BlockStatements BlockStatement
//
#line 2488 "java.g"
//
// Note that the list is circular so as to preserve the order of the elements
//
void Parser::Act130(void)
{
AstListNode *tail = (AstListNode *) Sym(1);
AstListNode *p = AllocateListNode();
p -> element = Sym(2);
p -> index = tail -> index + 1;
p -> next = tail -> next;
tail -> next = p;
Sym(1) = p;
}
//
// Rule 131: BlockStatement -> LocalVariableDeclarationStatement
//
// void NoAction(void);
//
//
// Rule 132: BlockStatement -> Statement
//
// void NoAction(void);
//
//
// Rule 133: BlockStatement -> ClassDeclaration
//
// void NoAction(void);
//
//
// Rule 134: LocalVariableDeclarationStatement ::= LocalVariableDeclaration SEMICOLON
//
#line 2522 "java.g"
void Parser::Act134(void)
{
((AstLocalVariableDeclarationStatement *) Sym(1)) -> semicolon_token_opt = Token(2);
}
//
// Rule 135: LocalVariableDeclaration ::= Type VariableDeclarators
//
#line 2531 "java.g"
void Parser::Act135(void)
{
AstLocalVariableDeclarationStatement *p = ast_pool -> NewLocalVariableDeclarationStatement();
p -> type = Sym(1);
//
// The list of declarators is guaranteed not empty
//
{
AstListNode *tail = (AstListNode *) Sym(2);
p -> AllocateVariableDeclarators(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddVariableDeclarator((AstVariableDeclarator *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
p -> semicolon_token_opt = 0;
Sym(1) = p;
}
//
// Rule 136: LocalVariableDeclaration ::= Modifiers Type VariableDeclarators
//
#line 2558 "java.g"
void Parser::Act136(void)
{
AstLocalVariableDeclarationStatement *p = ast_pool -> NewLocalVariableDeclarationStatement();
//
// The list of modifiers is guaranteed not empty
//
{
AstListNode *tail = (AstListNode *) Sym(1);
p -> AllocateLocalModifiers(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddLocalModifier((AstModifier *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
p -> type = Sym(2);
//
// The list of declarators is guaranteed not empty
//
{
AstListNode *tail = (AstListNode *) Sym(3);
p -> AllocateVariableDeclarators(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddVariableDeclarator((AstVariableDeclarator *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
p -> semicolon_token_opt = 0;
Sym(1) = p;
}
//
// Rule 137: Statement -> StatementWithoutTrailingSubstatement
//
// void NoAction(void);
//
//
// Rule 138: Statement -> LabeledStatement
//
// void NoAction(void);
//
//
// Rule 139: Statement -> IfThenStatement
//
// void NoAction(void);
//
//
// Rule 140: Statement -> IfThenElseStatement
//
// void NoAction(void);
//
//
// Rule 141: Statement -> WhileStatement
//
// void NoAction(void);
//
//
// Rule 142: Statement -> ForStatement
//
// void NoAction(void);
//
//
// Rule 143: StatementNoShortIf -> StatementWithoutTrailingSubstatement
//
// void NoAction(void);
//
//
// Rule 144: StatementNoShortIf -> LabeledStatementNoShortIf
//
// void NoAction(void);
//
//
// Rule 145: StatementNoShortIf -> IfThenElseStatementNoShortIf
//
// void NoAction(void);
//
//
// Rule 146: StatementNoShortIf -> WhileStatementNoShortIf
//
// void NoAction(void);
//
//
// Rule 147: StatementNoShortIf -> ForStatementNoShortIf
//
// void NoAction(void);
//
//
// Rule 148: StatementWithoutTrailingSubstatement -> Block
//
// void NoAction(void);
//
//
// Rule 149: StatementWithoutTrailingSubstatement -> EmptyStatement
//
// void NoAction(void);
//
//
// Rule 150: StatementWithoutTrailingSubstatement -> ExpressionStatement
//
// void NoAction(void);
//
//
// Rule 151: StatementWithoutTrailingSubstatement -> SwitchStatement
//
// void NoAction(void);
//
//
// Rule 152: StatementWithoutTrailingSubstatement -> DoStatement
//
// void NoAction(void);
//
//
// Rule 153: StatementWithoutTrailingSubstatement -> BreakStatement
//
// void NoAction(void);
//
//
// Rule 154: StatementWithoutTrailingSubstatement -> ContinueStatement
//
// void NoAction(void);
//
//
// Rule 155: StatementWithoutTrailingSubstatement -> ReturnStatement
//
// void NoAction(void);
//
//
// Rule 156: StatementWithoutTrailingSubstatement -> SynchronizedStatement
//
// void NoAction(void);
//
//
// Rule 157: StatementWithoutTrailingSubstatement -> ThrowStatement
//
// void NoAction(void);
//
//
// Rule 158: StatementWithoutTrailingSubstatement -> TryStatement
//
// void NoAction(void);
//
//
// Rule 159: EmptyStatement ::= SEMICOLON
//
// void MakeEmptyStatement(void);
//
//
// Rule 160: LabeledStatement ::= Identifier COLON Statement
//
#line 2693 "java.g"
void Parser::MakeLabeledStatement(void)
{
AstBlock *p = Sym(3) -> BlockCast();
if (! (p && p -> NumStatements() == 1 &&
(p -> Statement(0) -> kind == Ast::FOR ||
p -> Statement(0) -> kind == Ast::WHILE ||
p -> Statement(0) -> kind == Ast::DO)))
{
//
// When a statement is labeled, it is enclosed in a block.
// This is necessary in order to allow the same name to be
// reused to label a subsequent statement at the same nesting
// level... See ProcessBlock, ProcessStatement,...
//
p = ast_pool -> NewBlock();
p -> AllocateBlockStatements(1); // allocate 1 element
p -> left_brace_token = Token(1);
p -> AddStatement((AstStatement *) Sym(3));
p -> right_brace_token = Sym(3) -> RightToken();
}
p -> AddLabel(Token(1)); // add label to statement
Sym(1) = p; // The final result is a block containing the labeled-statement
}
//
// Rule 161: LabeledStatementNoShortIf ::= Identifier COLON StatementNoShortIf
//
// void MakeLabeledStatement(void);
//
//
// Rule 162: ExpressionStatement ::= StatementExpression SEMICOLON
//
#line 2730 "java.g"
void Parser::Act162(void)
{
((AstExpressionStatement *) Sym(1)) -> semicolon_token_opt = Token(2);
}
//
// Rule 163: StatementExpression ::= Assignment
//
#line 2739 "java.g"
void Parser::MakeExpressionStatement(void)
{
AstExpressionStatement *p = ast_pool -> NewExpressionStatement();
p -> expression = (AstExpression *) Sym(1);
p -> semicolon_token_opt = 0;
Sym(1) = p;
}
//
// Rule 164: StatementExpression ::= PreIncrementExpression
//
// void MakeExpressionStatement(void);
//
//
// Rule 165: StatementExpression ::= PreDecrementExpression
//
// void MakeExpressionStatement(void);
//
//
// Rule 166: StatementExpression ::= PostIncrementExpression
//
// void MakeExpressionStatement(void);
//
//
// Rule 167: StatementExpression ::= PostDecrementExpression
//
// void MakeExpressionStatement(void);
//
//
// Rule 168: StatementExpression ::= MethodInvocation
//
// void MakeExpressionStatement(void);
//
//
// Rule 169: StatementExpression ::= ClassInstanceCreationExpression
//
// void MakeExpressionStatement(void);
//
//
// Rule 170: IfThenStatement ::= if LPAREN Expression RPAREN Statement
//
#line 2793 "java.g"
void Parser::Act170(void)
{
AstBlock *block = Sym(5) -> BlockCast();
if (! block)
{
block = ast_pool -> NewBlock();
block -> AllocateBlockStatements(1); // allocate 1 element
block -> left_brace_token = Token(5);
block -> AddStatement((AstStatement *) Sym(5));
block -> right_brace_token = Sym(5) -> RightToken();
}
AstIfStatement *p = ast_pool -> NewIfStatement();
p -> if_token = Token(1);
p -> expression = (AstExpression *) Sym(3);
p -> true_statement = block;
p -> false_statement_opt = NULL;
Sym(1) = p;
}
//
// Rule 171: IfThenElseStatement ::= if LPAREN Expression RPAREN StatementNoShortIf else Statement
//
#line 2817 "java.g"
void Parser::MakeIfThenElseStatement(void)
{
AstBlock *true_block = Sym(5) -> BlockCast();
if (! true_block)
{
true_block = ast_pool -> NewBlock();
true_block -> AllocateBlockStatements(1); // allocate 1 element
true_block -> left_brace_token = Token(5);
true_block -> AddStatement((AstStatement *) Sym(5));
true_block -> right_brace_token = Sym(5) -> RightToken();
}
AstBlock *false_block = Sym(7) -> BlockCast();
if (! false_block)
{
false_block = ast_pool -> NewBlock();
false_block -> AllocateBlockStatements(1); // allocate 1 element
false_block -> left_brace_token = Token(7);
false_block -> AddStatement((AstStatement *) Sym(7));
false_block -> right_brace_token = Sym(7) -> RightToken();
}
AstIfStatement *p = ast_pool -> NewIfStatement();
p -> if_token = Token(1);
p -> expression = (AstExpression *) Sym(3);
p -> true_statement = true_block;
p -> false_statement_opt = false_block;
Sym(1) = p;
}
//
// Rule 172: IfThenElseStatementNoShortIf ::= if LPAREN Expression RPAREN StatementNoShortIf else StatementNoShortIf
//
// void MakeIfThenElseStatement(void);
//
//
// Rule 173: SwitchStatement ::= switch LPAREN Expression RPAREN SwitchBlock
//
#line 2858 "java.g"
void Parser::Act173(void)
{
AstSwitchStatement *p = (AstSwitchStatement *) Sym(5);
p -> switch_token = Token(1);
p -> expression = (AstExpression *) Sym(3);
Sym(1) = p;
}
//
// Rule 174: SwitchBlock ::= LBRACE RBRACE
//
#line 2870 "java.g"
void Parser::Act174(void)
{
AstSwitchStatement *p = ast_pool -> NewSwitchStatement();
AstBlock *block = ast_pool -> NewBlock();
block -> left_brace_token = Token(1);
block -> right_brace_token = Token(2);
p -> switch_block = block;
Sym(1) = p;
}
//
// Rule 175: SwitchBlock ::= LBRACE SwitchBlockStatements RBRACE
//
#line 2887 "java.g"
void Parser::Act175(void)
{
AstSwitchStatement *p = ast_pool -> NewSwitchStatement();
AstBlock *block = ast_pool -> NewBlock();
block -> left_brace_token = Token(1);
if (Sym(2) != NULL)
{
AstListNode *tail = (AstListNode *) Sym(2);
block -> AllocateBlockStatements(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
block -> AddStatement((AstStatement *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
block -> right_brace_token = Token(3);
p -> switch_block = block;
Sym(1) = p;
}
//
// Rule 176: SwitchBlock ::= LBRACE SwitchLabels RBRACE
//
#line 2916 "java.g"
void Parser::Act176(void)
{
AstSwitchStatement *p = ast_pool -> NewSwitchStatement();
AstSwitchBlockStatement *q = ast_pool -> NewSwitchBlockStatement();
q -> AddStatement(ast_pool -> NewEmptyStatement(Token(Sym(2) -> RightToken())));
//
// The list of SwitchBlockStatements is never null
//
{
AstListNode *tail = (AstListNode *) Sym(2);
q -> AllocateSwitchLabels(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
q -> AddSwitchLabel((AstStatement *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
AstBlock *block = ast_pool -> NewBlock();
block -> AllocateBlockStatements(1); // allocate 1 element
block -> left_brace_token = Token(1);
block -> AddStatement(q);
block -> right_brace_token = Token(3);
p -> switch_block = block;
Sym(1) = p;
}
//
// Rule 177: SwitchBlock ::= LBRACE SwitchBlockStatements SwitchLabels RBRACE
//
#line 2953 "java.g"
void Parser::Act177(void)
{
AstSwitchStatement *p = ast_pool -> NewSwitchStatement();
AstBlock *block = ast_pool -> NewBlock();
block -> left_brace_token = Token(1);
//
// The list of SwitchBlockStatements is never null
//
{
AstListNode *tail = (AstListNode *) Sym(2);
block -> AllocateBlockStatements(tail -> index + 2); // +1 because of extra statement for additional SwithLabels
AstListNode *root = tail;
do
{
root = root -> next;
block -> AddStatement((AstStatement *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
AstSwitchBlockStatement *q = ast_pool -> NewSwitchBlockStatement();
q -> AddStatement(ast_pool -> NewEmptyStatement(Token(Sym(3) -> RightToken())));
//
// The list of SwitchLabels is never null
//
{
AstListNode *tail = (AstListNode *) Sym(3);
q -> AllocateSwitchLabels(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
q -> AddSwitchLabel(root -> element);
} while(root != tail);
FreeCircularList(tail);
}
block -> AddStatement(q);
block -> right_brace_token = Token(4);
p -> switch_block = block;
Sym(1) = p;
}
//
// Rule 178: SwitchBlockStatements ::= SwitchBlockStatement
//
#line 3004 "java.g"
//
// Note that the list is circular so as to preserve the order of the elements
//
void Parser::Act178(void)
{
AstListNode *p = AllocateListNode();
p -> next = p;
p -> element = Sym(1);
p -> index = 0;
Sym(1) = p;
}
//
// Rule 179: SwitchBlockStatements ::= SwitchBlockStatements SwitchBlockStatement
//
#line 3021 "java.g"
//
// Note that the list is circular so as to preserve the order of the elements
//
void Parser::Act179(void)
{
AstListNode *tail = (AstListNode *) Sym(1);
AstListNode *p = AllocateListNode();
p -> element = Sym(2);
p -> index = tail -> index + 1;
p -> next = tail -> next;
tail -> next = p;
Sym(1) = p;
}
//
// Rule 180: SwitchBlockStatement ::= SwitchLabels BlockStatements
//
#line 3042 "java.g"
void Parser::Act180(void)
{
AstSwitchBlockStatement *p = ast_pool -> NewSwitchBlockStatement();
//
// The list of SwitchLabels is never null
//
{
AstListNode *tail = (AstListNode *) Sym(1);
p -> AllocateSwitchLabels(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddSwitchLabel(root -> element);
} while(root != tail);
FreeCircularList(tail);
}
//
// The list of SwitchBlockStatements is never null
//
{
AstListNode *tail = (AstListNode *) Sym(2);
p -> AllocateBlockStatements(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddStatement((AstStatement *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
Sym(1) = p;
}
//
// Rule 181: SwitchLabels ::= SwitchLabel
//
#line 3081 "java.g"
//
// Note that the list is circular so as to preserve the order of the elements
//
void Parser::Act181(void)
{
AstListNode *p = AllocateListNode();
p -> next = p;
p -> element = Sym(1);
p -> index = 0;
Sym(1) = p;
}
//
// Rule 182: SwitchLabels ::= SwitchLabels SwitchLabel
//
#line 3098 "java.g"
//
// Note that the list is circular so as to preserve the order of the elements
//
void Parser::Act182(void)
{
AstListNode *tail = (AstListNode *) Sym(1);
AstListNode *p = AllocateListNode();
p -> element = Sym(2);
p -> index = tail -> index + 1;
p -> next = tail -> next;
tail -> next = p;
Sym(1) = p;
}
//
// Rule 183: SwitchLabel ::= case ConstantExpression COLON
//
#line 3119 "java.g"
void Parser::Act183(void)
{
AstCaseLabel *p = ast_pool -> NewCaseLabel();
p -> case_token = Token(1);
p -> expression = (AstExpression *) Sym(2);
p -> colon_token = Token(3);
Sym(1) = p;
}
//
// Rule 184: SwitchLabel ::= default COLON
//
#line 3132 "java.g"
void Parser::Act184(void)
{
AstDefaultLabel *p = ast_pool -> NewDefaultLabel();
p -> default_token = Token(1);
p -> colon_token = Token(2);
Sym(1) = p;
}
//
// Rule 185: WhileStatement ::= while LPAREN Expression RPAREN Statement
//
#line 3144 "java.g"
void Parser::MakeWhileStatement(void)
{
AstWhileStatement *p = ast_pool -> NewWhileStatement();
p -> while_token = Token(1);
p -> expression = (AstExpression *) Sym(3);
p -> statement = (AstStatement *) Sym(5);
AstBlock *block = ast_pool -> NewBlock();
block -> AllocateBlockStatements(1); // allocate 1 element
block -> left_brace_token = Token(1); // point to 'FOR' keyword
block -> AddStatement(p);
block -> right_brace_token = Sym(5) -> RightToken(); // point to last token in statement
Sym(1) = block;
}
//
// Rule 186: WhileStatementNoShortIf ::= while LPAREN Expression RPAREN StatementNoShortIf
//
// void MakeWhileStatement(void);
//
//
// Rule 187: DoStatement ::= do Statement while LPAREN Expression RPAREN SEMICOLON
//
#line 3171 "java.g"
void Parser::Act187(void)
{
AstDoStatement *p = ast_pool -> NewDoStatement();
p -> do_token = Token(1);
p -> statement = (AstStatement *) Sym(2);
p -> while_token = Token(3);
p -> expression = (AstExpression *) Sym(5);
p -> semicolon_token = Token(7);
AstBlock *block = ast_pool -> NewBlock();
block -> AllocateBlockStatements(1); // allocate 1 element
block -> left_brace_token = Token(1);
block -> AddStatement(p);
block -> right_brace_token = Token(7);
Sym(1) = block;
}
//
// Rule 188: ForStatement ::= for LPAREN ForInitopt SEMICOLON Expressionopt SEMICOLON ForUpdateopt RPAREN Statement
//
#line 3193 "java.g"
void Parser::MakeForStatement(void)
{
AstForStatement *p = ast_pool -> NewForStatement();
p -> for_token = Token(1);
if (Sym(3) != NULL)
{
AstListNode *tail = (AstListNode *) Sym(3);
p -> AllocateForInitStatements(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddForInitStatement((AstStatement *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
p -> end_expression_opt = (AstExpression *) Sym(5);
if (Sym(7) != NULL)
{
AstListNode *tail = (AstListNode *) Sym(7);
p -> AllocateForUpdateStatements(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddForUpdateStatement((AstExpressionStatement *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
p -> statement = (AstStatement *) Sym(9);
AstBlock *block = ast_pool -> NewBlock();
block -> AllocateBlockStatements(1); // allocate 1 element
block -> left_brace_token = Token(1);
block -> AddStatement(p);
block -> right_brace_token = Sym(9) -> RightToken();
Sym(1) = block;
}
//
// Rule 189: ForStatementNoShortIf ::= for LPAREN ForInitopt SEMICOLON Expressionopt SEMICOLON ForUpdateopt RPAREN...
//
// void MakeForStatement(void);
//
//
// Rule 190: ForInit -> StatementExpressionList
//
// void NoAction(void);
//
//
// Rule 191: ForInit ::= LocalVariableDeclaration
//
#line 3248 "java.g"
//
// Note that the list is circular so as to preserve the order of the elements
//
void Parser::Act191(void)
{
AstListNode *p = AllocateListNode();
p -> next = p;
p -> element = Sym(1);
p -> index = 0;
Sym(1) = p;
}
//
// Rule 192: ForUpdate -> StatementExpressionList
//
// void NoAction(void);
//
//
// Rule 193: StatementExpressionList ::= StatementExpression
//
#line 3269 "java.g"
//
// Note that the list is circular so as to preserve the order of the elements
//
void Parser::Act193(void)
{
AstListNode *p = AllocateListNode();
p -> next = p;
p -> element = Sym(1);
p -> index = 0;
Sym(1) = p;
}
//
// Rule 194: StatementExpressionList ::= StatementExpressionList COMMA StatementExpression
//
#line 3286 "java.g"
//
// Note that the list is circular so as to preserve the order of the elements
//
void Parser::Act194(void)
{
AstListNode *tail = (AstListNode *) Sym(1);
AstListNode *p = AllocateListNode();
p -> element = Sym(3);
p -> index = tail -> index + 1;
p -> next = tail -> next;
tail -> next = p;
Sym(1) = p;
}
//
// Rule 195: BreakStatement ::= break SEMICOLON
//
#line 3313 "java.g"
void Parser::Act195(void)
{
AstBreakStatement *p = ast_pool -> NewBreakStatement();
p -> break_token = Token(1);
p -> identifier_token_opt = 0;
p -> semicolon_token = Token(2);
Sym(1) = p;
}
//
// Rule 196: BreakStatement ::= break Identifier SEMICOLON
//
#line 3326 "java.g"
void Parser::Act196(void)
{
AstBreakStatement *p = ast_pool -> NewBreakStatement();
p -> break_token = Token(1);
p -> identifier_token_opt = Token(2);
p -> semicolon_token = Token(3);
Sym(1) = p;
}
//
// Rule 197: ContinueStatement ::= continue SEMICOLON
//
#line 3339 "java.g"
void Parser::Act197(void)
{
AstContinueStatement *p = ast_pool -> NewContinueStatement();
p -> continue_token = Token(1);
p -> identifier_token_opt = 0;
p -> semicolon_token = Token(2);
Sym(1) = p;
}
//
// Rule 198: ContinueStatement ::= continue Identifier SEMICOLON
//
#line 3352 "java.g"
void Parser::Act198(void)
{
AstContinueStatement *p = ast_pool -> NewContinueStatement();
p -> continue_token = Token(1);
p -> identifier_token_opt = Token(2);
p -> semicolon_token = Token(3);
Sym(1) = p;
}
//
// Rule 199: ReturnStatement ::= return Expressionopt SEMICOLON
//
#line 3365 "java.g"
void Parser::Act199(void)
{
AstReturnStatement *p = ast_pool -> NewReturnStatement();
p -> return_token = Token(1);
p -> expression_opt = (AstExpression *) Sym(2);
p -> semicolon_token = Token(3);
Sym(1) = p;
}
//
// Rule 200: ThrowStatement ::= throw Expression SEMICOLON
//
#line 3378 "java.g"
void Parser::Act200(void)
{
AstThrowStatement *p = ast_pool -> NewThrowStatement();
p -> throw_token = Token(1);
p -> expression = (AstExpression *) Sym(2);
p -> semicolon_token = Token(3);
Sym(1) = p;
}
//
// Rule 201: SynchronizedStatement ::= synchronized LPAREN Expression RPAREN Block
//
#line 3391 "java.g"
void Parser::Act201(void)
{
AstSynchronizedStatement *p = ast_pool -> NewSynchronizedStatement();
p -> synchronized_token = Token(1);
p -> expression = (AstExpression *) Sym(3);
p -> block = (AstBlock *) Sym(5);
p -> block -> block_tag = AstBlock::SYNCHRONIZED;
Sym(1) = p;
}
//
// Rule 202: TryStatement ::= try Block Catches
//
#line 3406 "java.g"
void Parser::Act202(void)
{
AstTryStatement *p = ast_pool -> NewTryStatement();
p -> try_token = Token(1);
p -> block = (AstBlock *) Sym(2);
//
// The list of modifiers is guaranteed not empty
//
{
AstListNode *tail = (AstListNode *) Sym(3);
p -> AllocateCatchClauses(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddCatchClause((AstCatchClause *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
p -> finally_clause_opt = NULL;
Sym(1) = p;
}
//
// Rule 203: TryStatement ::= try Block Catchesopt Finally
//
#line 3434 "java.g"
void Parser::Act203(void)
{
AstTryStatement *p = ast_pool -> NewTryStatement();
p -> try_token = Token(1);
p -> block = (AstBlock *) Sym(2);
p -> block -> block_tag = AstBlock::TRY_CLAUSE_WITH_FINALLY;
if (Sym(3) != NULL)
{
AstListNode *tail = (AstListNode *) Sym(3);
p -> AllocateCatchClauses(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddCatchClause((AstCatchClause *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
for (int i = 0; i < p -> NumCatchClauses(); i++)
p -> CatchClause(i) -> block -> block_tag = AstBlock::TRY_CLAUSE_WITH_FINALLY;
p -> finally_clause_opt = (AstFinallyClause *) Sym(4);
Sym(1) = p;
}
//
// Rule 204: Catches ::= CatchClause
//
#line 3466 "java.g"
//
// Note that the list is circular so as to preserve the order of the elements
//
void Parser::Act204(void)
{
AstListNode *p = AllocateListNode();
p -> next = p;
p -> element = Sym(1);
p -> index = 0;
Sym(1) = p;
}
//
// Rule 205: Catches ::= Catches CatchClause
//
#line 3483 "java.g"
//
// Note that the list is circular so as to preserve the order of the elements
//
void Parser::Act205(void)
{
AstListNode *tail = (AstListNode *) Sym(1);
AstListNode *p = AllocateListNode();
p -> element = Sym(2);
p -> index = tail -> index + 1;
p -> next = tail -> next;
tail -> next = p;
Sym(1) = p;
}
//
// Rule 206: CatchClause ::= catch LPAREN FormalParameter RPAREN Block
//
#line 3504 "java.g"
void Parser::Act206(void)
{
AstCatchClause *p = ast_pool -> NewCatchClause();
p -> catch_token = Token(1);
p -> formal_parameter = (AstFormalParameter *) Sym(3);
p -> block = (AstBlock *) Sym(5);
Sym(1) = p;
}
//
// Rule 207: Finally ::= finally Block
//
#line 3518 "java.g"
void Parser::Act207(void)
{
AstFinallyClause *p = ast_pool -> NewFinallyClause();
p -> finally_token = Token(1);
p -> block = (AstBlock *) Sym(2);
p -> block -> block_tag = AstBlock::FINALLY;
Sym(1) = p;
}
//
// Rule 208: Primary -> PrimaryNoNewArray
//
// void NoAction(void);
//
//
// Rule 209: Primary -> ArrayCreationExpression
//
// void NoAction(void);
//
//
// Rule 210: PrimaryNoNewArray -> Literal
//
// void NoAction(void);
//
//
// Rule 211: PrimaryNoNewArray ::= this
//
#line 3546 "java.g"
void Parser::Act211(void)
{
Sym(1) = ast_pool -> NewThisExpression(Token(1));
}
//
// Rule 212: PrimaryNoNewArray ::= LPAREN Expression RPAREN
//
#line 3555 "java.g"
void Parser::Act212(void)
{
AstParenthesizedExpression *p = ast_pool -> NewParenthesizedExpression();
p -> left_parenthesis_token = Token(1);
p -> expression = (AstExpression *) Sym(2);
p -> right_parenthesis_token = Token(3);
Sym(1) = p;
}
//
// Rule 213: PrimaryNoNewArray -> ClassInstanceCreationExpression
//
// void NoAction(void);
//
//
// Rule 214: PrimaryNoNewArray -> FieldAccess
//
// void NoAction(void);
//
//
// Rule 215: PrimaryNoNewArray ::= Name DOT this
//
#line 3577 "java.g"
void Parser::Act215(void)
{
AstFieldAccess *p = ast_pool -> NewFieldAccess(AstFieldAccess::THIS_TAG);
p -> base = (AstExpression *) Sym(1);
p -> dot_token = Token(2);
p -> identifier_token = Token(3);
Sym(1) = p;
}
//
// Rule 216: PrimaryNoNewArray ::= Type DOT class
//
#line 3591 "java.g"
void Parser::Act216(void)
{
AstFieldAccess *p = ast_pool -> NewFieldAccess(AstFieldAccess::CLASS_TAG);
p -> base = ast_pool -> NewTypeExpression(Sym(1));
p -> dot_token = Token(2);
p -> identifier_token = Token(3);
Sym(1) = p;
}
//
// Rule 217: PrimaryNoNewArray ::= void DOT class
//
#line 3605 "java.g"
void Parser::Act217(void)
{
AstFieldAccess *p = ast_pool -> NewFieldAccess(AstFieldAccess::CLASS_TAG);
p -> base = ast_pool -> NewTypeExpression(ast_pool -> NewPrimitiveType(Ast::VOID_TYPE, Token(1)));
p -> dot_token = Token(2);
p -> identifier_token = Token(3);
Sym(1) = p;
}
//
// Rule 218: PrimaryNoNewArray -> MethodInvocation
//
// void NoAction(void);
//
//
// Rule 219: PrimaryNoNewArray -> ArrayAccess
//
// void NoAction(void);
//
//
// Rule 220: ClassInstanceCreationExpression ::= new ClassType LPAREN ArgumentListopt RPAREN ClassBodyopt
//
#line 3631 "java.g"
void Parser::Act220(void)
{
AstClassInstanceCreationExpression *p = ast_pool -> NewClassInstanceCreationExpression();
p -> base_opt = NULL;
p -> dot_token_opt = 0;
p -> new_token = Token(1);
p -> class_type = ast_pool -> NewTypeExpression(Sym(2));
p -> left_parenthesis_token = Token(3);
if (Sym(4) != NULL)
{
AstListNode *tail = (AstListNode *) Sym(4);
p -> AllocateArguments(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddArgument((AstExpression *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
p -> right_parenthesis_token = Token(5);
p -> class_body_opt = (AstClassBody *) Sym(6);
Sym(1) = p;
}
//
// Rule 221: ClassInstanceCreationExpression ::= Primary DOT new SimpleName LPAREN ArgumentListopt RPAREN ClassBodyopt
//
#line 3661 "java.g"
void Parser::MakeQualifiedNew(void)
{
AstClassInstanceCreationExpression *p = ast_pool -> NewClassInstanceCreationExpression();
p -> base_opt = (AstExpression *) Sym(1);
p -> dot_token_opt = Token(2);
p -> new_token = Token(3);
p -> class_type = ast_pool -> NewTypeExpression(Sym(4));
p -> left_parenthesis_token = Token(5);
if (Sym(6) != NULL)
{
AstListNode *tail = (AstListNode *) Sym(6);
p -> AllocateArguments(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddArgument((AstExpression *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
p -> right_parenthesis_token = Token(7);
p -> class_body_opt = (AstClassBody *) Sym(8);
Sym(1) = p;
}
//
// Rule 222: ClassInstanceCreationExpression ::= Name DOT new SimpleName LPAREN ArgumentListopt RPAREN ClassBodyopt
//
// void MakeQualifiedNew(void);
//
//
// Rule 223: ArgumentList ::= Expression
//
#line 3698 "java.g"
//
// Note that the list is circular so as to preserve the order of the elements
//
void Parser::Act223(void)
{
AstListNode *p = AllocateListNode();
p -> next = p;
p -> element = Sym(1);
p -> index = 0;
Sym(1) = p;
}
//
// Rule 224: ArgumentList ::= ArgumentList COMMA Expression
//
#line 3715 "java.g"
//
// Note that the list is circular so as to preserve the order of the elements
//
void Parser::Act224(void)
{
AstListNode *tail = (AstListNode *) Sym(1);
AstListNode *p = AllocateListNode();
p -> element = Sym(3);
p -> index = tail -> index + 1;
p -> next = tail -> next;
tail -> next = p;
Sym(1) = p;
}
//
// Rule 225: ArrayCreationExpression ::= new PrimitiveType DimExprs Dimsopt
//
#line 3736 "java.g"
void Parser::MakeArrayCreationExpression(void)
{
AstArrayCreationExpression *p = ast_pool -> NewArrayCreationExpression();
p -> new_token = Token(1);
p -> array_type = Sym(2);
//
// The list of DimExprs is never null
//
{
AstListNode *tail = (AstListNode *) Sym(3);
p -> AllocateDimExprs(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddDimExpr((AstDimExpr *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
if (Sym(4) != NULL)
{
AstListNode *tail = (AstListNode *) Sym(4);
p -> AllocateBrackets(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddBrackets((AstBrackets *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
p -> array_initializer_opt = NULL;
Sym(1) = p;
}
//
// Rule 226: ArrayCreationExpression ::= new ClassOrInterfaceType DimExprs Dimsopt
//
// void MakeArrayCreationExpression(void);
//
//
// Rule 227: ArrayCreationExpression ::= new ArrayType ArrayInitializer
//
#line 3784 "java.g"
void Parser::Act227(void)
{
AstArrayCreationExpression *p = ast_pool -> NewArrayCreationExpression();
p -> new_token = Token(1);
p -> array_type = Sym(2);
p -> array_initializer_opt = (AstArrayInitializer *) Sym(3);
Sym(1) = p;
}
//
// Rule 228: DimExprs ::= DimExpr
//
#line 3797 "java.g"
//
// Note that the list is circular so as to preserve the order of the elements
//
void Parser::Act228(void)
{
AstListNode *p = AllocateListNode();
p -> next = p;
p -> element = Sym(1);
p -> index = 0;
Sym(1) = p;
}
//
// Rule 229: DimExprs ::= DimExprs DimExpr
//
#line 3814 "java.g"
//
// Note that the list is circular so as to preserve the order of the elements
//
void Parser::Act229(void)
{
AstListNode *tail = (AstListNode *) Sym(1);
AstListNode *p = AllocateListNode();
p -> element = Sym(2);
p -> index = tail -> index + 1;
p -> next = tail -> next;
tail -> next = p;
Sym(1) = p;
}
//
// Rule 230: DimExpr ::= LBRACKET Expression RBRACKET
//
#line 3835 "java.g"
void Parser::Act230(void)
{
AstDimExpr *p = ast_pool -> NewDimExpr();
p -> left_bracket_token = Token(1);
p -> expression = (AstExpression *) Sym(2);
p -> right_bracket_token = Token(3);
Sym(1) = p;
}
//
// Rule 231: Dims ::= LBRACKET RBRACKET
//
#line 3848 "java.g"
//
// Note that the list is circular so as to preserve the order of the elements
//
void Parser::Act231(void)
{
AstListNode *p = AllocateListNode();
p -> next = p;
p -> element = ast_pool -> NewBrackets(Token(1), Token(2));
p -> index = 0;
Sym(1) = p;
}
//
// Rule 232: Dims ::= Dims LBRACKET RBRACKET
//
#line 3865 "java.g"
//
// Note that the list is circular so as to preserve the order of the elements
//
void Parser::Act232(void)
{
AstListNode *tail = (AstListNode *) Sym(1);
AstListNode *p = AllocateListNode();
p -> element = ast_pool -> NewBrackets(Token(2), Token(3));
p -> index = tail -> index + 1;
p -> next = tail -> next;
tail -> next = p;
Sym(1) = p;
}
//
// Rule 233: FieldAccess ::= Primary DOT Identifier
//
// void MakeFieldAccess(void);
//
//
// Rule 234: FieldAccess ::= super DOT Identifier
//
#line 3893 "java.g"
void Parser::MakeSuperFieldAccess(void)
{
Sym(1) = ast_pool -> NewSuperExpression(Token(1));
MakeFieldAccess();
}
//
// Rule 235: FieldAccess ::= Name DOT super DOT Identifier
//
#line 3905 "java.g"
void Parser::MakeSuperDoubleFieldAccess(void)
{
AstFieldAccess *p = ast_pool -> NewFieldAccess();
AstFieldAccess *q = ast_pool -> NewFieldAccess(AstFieldAccess::SUPER_TAG);
q -> base = (AstExpression *) Sym(1);
q -> dot_token = Token(2);
q -> identifier_token = Token(3);
p -> base = q;
p -> dot_token = Token(4);
p -> identifier_token = Token(5);
Sym(1) = p;
}
//
// Rule 236: MethodInvocation ::= Name LPAREN ArgumentListopt RPAREN
//
#line 3925 "java.g"
void Parser::Act236(void)
{
AstMethodInvocation *p = ast_pool -> NewMethodInvocation();
p -> method = (AstExpression *) Sym(1);
p -> left_parenthesis_token = Token(2);
if (Sym(3) != NULL)
{
AstListNode *tail = (AstListNode *) Sym(3);
p -> AllocateArguments(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddArgument((AstExpression *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
p -> right_parenthesis_token = Token(4);
Sym(1) = p;
}
//
// Rule 237: MethodInvocation ::= Primary DOT Identifier LPAREN ArgumentListopt RPAREN
//
#line 3950 "java.g"
void Parser::Act237(void)
{
MakeFieldAccess();
AstMethodInvocation *p = ast_pool -> NewMethodInvocation();
p -> method = (AstExpression *) Sym(1);
p -> left_parenthesis_token = Token(4);
if (Sym(5) != NULL)
{
AstListNode *tail = (AstListNode *) Sym(5);
p -> AllocateArguments(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddArgument((AstExpression *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
p -> right_parenthesis_token = Token(6);
Sym(1) = p;
}
//
// Rule 238: MethodInvocation ::= super DOT Identifier LPAREN ArgumentListopt RPAREN
//
#line 3977 "java.g"
void Parser::Act238(void)
{
MakeSuperFieldAccess();
AstMethodInvocation *p = ast_pool -> NewMethodInvocation();
p -> method = (AstExpression *) Sym(1);
p -> left_parenthesis_token = Token(4);
if (Sym(5) != NULL)
{
AstListNode *tail = (AstListNode *) Sym(5);
p -> AllocateArguments(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddArgument((AstExpression *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
p -> right_parenthesis_token = Token(6);
Sym(1) = p;
}
//
// Rule 239: MethodInvocation ::= Name DOT super DOT Identifier LPAREN ArgumentListopt RPAREN
//
#line 4005 "java.g"
void Parser::Act239(void)
{
MakeSuperDoubleFieldAccess();
AstMethodInvocation *p = ast_pool -> NewMethodInvocation();
p -> method = (AstExpression *) Sym(1);
p -> left_parenthesis_token = Token(6);
if (Sym(7) != NULL)
{
AstListNode *tail = (AstListNode *) Sym(7);
p -> AllocateArguments(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddArgument((AstExpression *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
p -> right_parenthesis_token = Token(8);
Sym(1) = p;
}
//
// Rule 240: ArrayAccess ::= Name LBRACKET Expression RBRACKET
//
#line 4032 "java.g"
void Parser::MakeArrayAccess(void)
{
AstArrayAccess *p = ast_pool -> NewArrayAccess();
p -> base = (AstExpression *) Sym(1);
p -> left_bracket_token = Token(2);
p -> expression = (AstExpression *) Sym(3);
p -> right_bracket_token = Token(4);
Sym(1) = p;
}
//
// Rule 241: ArrayAccess ::= PrimaryNoNewArray LBRACKET Expression RBRACKET
//
// void MakeArrayAccess(void);
//
//
// Rule 242: PostfixExpression -> Primary
//
// void NoAction(void);
//
//
// Rule 243: PostfixExpression -> Name
//
// void NoAction(void);
//
//
// Rule 244: PostfixExpression -> PostIncrementExpression
//
// void NoAction(void);
//
//
// Rule 245: PostfixExpression -> PostDecrementExpression
//
// void NoAction(void);
//
//
// Rule 246: PostIncrementExpression ::= PostfixExpression PLUS_PLUS
//
#line 4069 "java.g"
void Parser::Act246(void)
{
AstPostUnaryExpression *p = ast_pool -> NewPostUnaryExpression(AstPostUnaryExpression::PLUSPLUS);
p -> expression = (AstExpression *) Sym(1);
p -> post_operator_token = Token(2);
Sym(1) = p;
}
//
// Rule 247: PostDecrementExpression ::= PostfixExpression MINUS_MINUS
//
#line 4081 "java.g"
void Parser::Act247(void)
{
AstPostUnaryExpression *p = ast_pool -> NewPostUnaryExpression(AstPostUnaryExpression::MINUSMINUS);
p -> expression = (AstExpression *) Sym(1);
p -> post_operator_token = Token(2);
Sym(1) = p;
}
//
// Rule 248: UnaryExpression -> PreIncrementExpression
//
// void NoAction(void);
//
//
// Rule 249: UnaryExpression -> PreDecrementExpression
//
// void NoAction(void);
//
//
// Rule 250: UnaryExpression ::= PLUS UnaryExpression
//
#line 4101 "java.g"
void Parser::Act250(void)
{
AstPreUnaryExpression *p = ast_pool -> NewPreUnaryExpression(AstPreUnaryExpression::PLUS);
p -> pre_operator_token = Token(1);
p -> expression = (AstExpression *) Sym(2);
Sym(1) = p;
}
//
// Rule 251: UnaryExpression ::= MINUS UnaryExpression
//
#line 4113 "java.g"
void Parser::Act251(void)
{
AstPreUnaryExpression *p = ast_pool -> NewPreUnaryExpression(AstPreUnaryExpression::MINUS);
p -> pre_operator_token = Token(1);
p -> expression = (AstExpression *) Sym(2);
Sym(1) = p;
}
//
// Rule 252: UnaryExpression -> UnaryExpressionNotPlusMinus
//
// void NoAction(void);
//
//
// Rule 253: PreIncrementExpression ::= PLUS_PLUS UnaryExpression
//
#line 4129 "java.g"
void Parser::Act253(void)
{
AstPreUnaryExpression *p = ast_pool -> NewPreUnaryExpression(AstPreUnaryExpression::PLUSPLUS);
p -> pre_operator_token = Token(1);
p -> expression = (AstExpression *) Sym(2);
Sym(1) = p;
}
//
// Rule 254: PreDecrementExpression ::= MINUS_MINUS UnaryExpression
//
#line 4141 "java.g"
void Parser::Act254(void)
{
AstPreUnaryExpression *p = ast_pool -> NewPreUnaryExpression(AstPreUnaryExpression::MINUSMINUS);
p -> pre_operator_token = Token(1);
p -> expression = (AstExpression *) Sym(2);
Sym(1) = p;
}
//
// Rule 255: UnaryExpressionNotPlusMinus -> PostfixExpression
//
// void NoAction(void);
//
//
// Rule 256: UnaryExpressionNotPlusMinus ::= TWIDDLE UnaryExpression
//
#line 4157 "java.g"
void Parser::Act256(void)
{
AstPreUnaryExpression *p = ast_pool -> NewPreUnaryExpression(AstPreUnaryExpression::TWIDDLE);
p -> pre_operator_token = Token(1);
p -> expression = (AstExpression *) Sym(2);
Sym(1) = p;
}
//
// Rule 257: UnaryExpressionNotPlusMinus ::= NOT UnaryExpression
//
#line 4169 "java.g"
void Parser::Act257(void)
{
AstPreUnaryExpression *p = ast_pool -> NewPreUnaryExpression(AstPreUnaryExpression::NOT);
p -> pre_operator_token = Token(1);
p -> expression = (AstExpression *) Sym(2);
Sym(1) = p;
}
//
// Rule 258: UnaryExpressionNotPlusMinus -> CastExpression
//
// void NoAction(void);
//
//
// Rule 259: CastExpression ::= LPAREN PrimitiveType Dimsopt RPAREN UnaryExpression
//
#line 4185 "java.g"
void Parser::MakeCastExpression(void)
{
AstCastExpression *p = ast_pool -> NewCastExpression();
p -> left_parenthesis_token_opt = Token(1);
p -> type_opt = Sym(2);
if (Sym(3) != NULL)
{
AstListNode *tail = (AstListNode *) Sym(3);
p -> AllocateBrackets(tail -> index + 1);
AstListNode *root = tail;
do
{
root = root -> next;
p -> AddBrackets((AstBrackets *) root -> element);
} while(root != tail);
FreeCircularList(tail);
}
p -> right_parenthesis_token_opt = Token(4);
p -> expression = (AstExpression *) Sym(5);
Sym(1) = p;
}
//
// Rule 260: CastExpression ::= LPAREN Expression RPAREN UnaryExpressionNotPlusMinus
//
#line 4211 "java.g"
void Parser::Act260(void)
{
//
// Note that Expression must be a name - i.e., Sym(2) -> isName() == true
// This check is not performed here and should be performed during
// semantic processing.
//
AstCastExpression *p = ast_pool -> NewCastExpression();
p -> left_parenthesis_token_opt = Token(1);
p -> type_opt = Sym(2);
p -> right_parenthesis_token_opt = Token(3);
p -> expression = (AstExpression *) Sym(4);
Sym(1) = p;
}
//
// Rule 261: CastExpression ::= LPAREN Name Dims RPAREN UnaryExpressionNotPlusMinus
//
// void MakeCastExpression(void);
//
//
// Rule 262: MultiplicativeExpression -> UnaryExpression
//
// void NoAction(void);
//
//
// Rule 263: MultiplicativeExpression ::= MultiplicativeExpression MULTIPLY UnaryExpression
//
#line 4241 "java.g"
void Parser::Act263(void)
{
AstBinaryExpression *p = ast_pool -> NewBinaryExpression(AstBinaryExpression::STAR);
p -> left_expression = (AstExpression *) Sym(1);
p -> binary_operator_token = Token(2);
p -> right_expression = (AstExpression *) Sym(3);
Sym(1) = p;
}
//
// Rule 264: MultiplicativeExpression ::= MultiplicativeExpression DIVIDE UnaryExpression
//
#line 4254 "java.g"
void Parser::Act264(void)
{
AstBinaryExpression *p = ast_pool -> NewBinaryExpression(AstBinaryExpression::SLASH);
p -> left_expression = (AstExpression *) Sym(1);
p -> binary_operator_token = Token(2);
p -> right_expression = (AstExpression *) Sym(3);
Sym(1) = p;
}
//
// Rule 265: MultiplicativeExpression ::= MultiplicativeExpression REMAINDER UnaryExpression
//
#line 4267 "java.g"
void Parser::Act265(void)
{
AstBinaryExpression *p = ast_pool -> NewBinaryExpression(AstBinaryExpression::MOD);
p -> left_expression = (AstExpression *) Sym(1);
p -> binary_operator_token = Token(2);
p -> right_expression = (AstExpression *) Sym(3);
Sym(1) = p;
}
//
// Rule 266: AdditiveExpression -> MultiplicativeExpression
//
// void NoAction(void);
//
//
// Rule 267: AdditiveExpression ::= AdditiveExpression PLUS MultiplicativeExpression
//
#line 4284 "java.g"
void Parser::Act267(void)
{
AstBinaryExpression *p = ast_pool -> NewBinaryExpression(AstBinaryExpression::PLUS);
p -> left_expression = (AstExpression *) Sym(1);
p -> binary_operator_token = Token(2);
p -> right_expression = (AstExpression *) Sym(3);
Sym(1) = p;
}
//
// Rule 268: AdditiveExpression ::= AdditiveExpression MINUS MultiplicativeExpression
//
#line 4297 "java.g"
void Parser::Act268(void)
{
AstBinaryExpression *p = ast_pool -> NewBinaryExpression(AstBinaryExpression::MINUS);
p -> left_expression = (AstExpression *) Sym(1);
p -> binary_operator_token = Token(2);
p -> right_expression = (AstExpression *) Sym(3);
Sym(1) = p;
}
//
// Rule 269: ShiftExpression -> AdditiveExpression
//
// void NoAction(void);
//
//
// Rule 270: ShiftExpression ::= ShiftExpression LEFT_SHIFT AdditiveExpression
//
#line 4314 "java.g"
void Parser::Act270(void)
{
AstBinaryExpression *p = ast_pool -> NewBinaryExpression(AstBinaryExpression::LEFT_SHIFT);
p -> left_expression = (AstExpression *) Sym(1);
p -> binary_operator_token = Token(2);
p -> right_expression = (AstExpression *) Sym(3);
Sym(1) = p;
}
//
// Rule 271: ShiftExpression ::= ShiftExpression RIGHT_SHIFT AdditiveExpression
//
#line 4327 "java.g"
void Parser::Act271(void)
{
AstBinaryExpression *p = ast_pool -> NewBinaryExpression(AstBinaryExpression::RIGHT_SHIFT);
p -> left_expression = (AstExpression *) Sym(1);
p -> binary_operator_token = Token(2);
p -> right_expression = (AstExpression *) Sym(3);
Sym(1) = p;
}
//
// Rule 272: ShiftExpression ::= ShiftExpression UNSIGNED_RIGHT_SHIFT AdditiveExpression
//
#line 4340 "java.g"
void Parser::Act272(void)
{
AstBinaryExpression *p = ast_pool -> NewBinaryExpression(AstBinaryExpression::UNSIGNED_RIGHT_SHIFT);
p -> left_expression = (AstExpression *) Sym(1);
p -> binary_operator_token = Token(2);
p -> right_expression = (AstExpression *) Sym(3);
Sym(1) = p;
}
//
// Rule 273: RelationalExpression -> ShiftExpression
//
// void NoAction(void);
//
//
// Rule 274: RelationalExpression ::= RelationalExpression LESS ShiftExpression
//
#line 4357 "java.g"
void Parser::Act274(void)
{
AstBinaryExpression *p = ast_pool -> NewBinaryExpression(AstBinaryExpression::LESS);
p -> left_expression = (AstExpression *) Sym(1);
p -> binary_operator_token = Token(2);
p -> right_expression = (AstExpression *) Sym(3);
Sym(1) = p;
}
//
// Rule 275: RelationalExpression ::= RelationalExpression GREATER ShiftExpression
//
#line 4370 "java.g"
void Parser::Act275(void)
{
AstBinaryExpression *p = ast_pool -> NewBinaryExpression(AstBinaryExpression::GREATER);
p -> left_expression = (AstExpression *) Sym(1);
p -> binary_operator_token = Token(2);
p -> right_expression = (AstExpression *) Sym(3);
Sym(1) = p;
}
//
// Rule 276: RelationalExpression ::= RelationalExpression LESS_EQUAL ShiftExpression
//
#line 4383 "java.g"
void Parser::Act276(void)
{
AstBinaryExpression *p = ast_pool -> NewBinaryExpression(AstBinaryExpression::LESS_EQUAL);
p -> left_expression = (AstExpression *) Sym(1);
p -> binary_operator_token = Token(2);
p -> right_expression = (AstExpression *) Sym(3);
Sym(1) = p;
}
//
// Rule 277: RelationalExpression ::= RelationalExpression GREATER_EQUAL ShiftExpression
//
#line 4396 "java.g"
void Parser::Act277(void)
{
AstBinaryExpression *p = ast_pool -> NewBinaryExpression(AstBinaryExpression::GREATER_EQUAL);
p -> left_expression = (AstExpression *) Sym(1);
p -> binary_operator_token = Token(2);
p -> right_expression = (AstExpression *) Sym(3);
Sym(1) = p;
}
//
// Rule 278: RelationalExpression ::= RelationalExpression instanceof ReferenceType
//
#line 4409 "java.g"
void Parser::Act278(void)
{
AstBinaryExpression *p = ast_pool -> NewBinaryExpression(AstBinaryExpression::INSTANCEOF);
p -> left_expression = (AstExpression *) Sym(1);
p -> binary_operator_token = Token(2);
p -> right_expression = ast_pool -> NewTypeExpression(Sym(3));
Sym(1) = p;
}
//
// Rule 279: EqualityExpression -> RelationalExpression
//
// void NoAction(void);
//
//
// Rule 280: EqualityExpression ::= EqualityExpression EQUAL_EQUAL RelationalExpression
//
#line 4426 "java.g"
void Parser::Act280(void)
{
AstBinaryExpression *p = ast_pool -> NewBinaryExpression(AstBinaryExpression::EQUAL_EQUAL);
p -> left_expression = (AstExpression *) Sym(1);
p -> binary_operator_token = Token(2);
p -> right_expression = (AstExpression *) Sym(3);
Sym(1) = p;
}
//
// Rule 281: EqualityExpression ::= EqualityExpression NOT_EQUAL RelationalExpression
//
#line 4439 "java.g"
void Parser::Act281(void)
{
AstBinaryExpression *p = ast_pool -> NewBinaryExpression(AstBinaryExpression::NOT_EQUAL);
p -> left_expression = (AstExpression *) Sym(1);
p -> binary_operator_token = Token(2);
p -> right_expression = (AstExpression *) Sym(3);
Sym(1) = p;
}
//
// Rule 282: AndExpression -> EqualityExpression
//
// void NoAction(void);
//
//
// Rule 283: AndExpression ::= AndExpression AND EqualityExpression
//
#line 4457 "java.g"
void Parser::Act283(void)
{
AstBinaryExpression *p = ast_pool -> NewBinaryExpression(AstBinaryExpression::AND);
p -> left_expression = (AstExpression *) Sym(1);
p -> binary_operator_token = Token(2);
p -> right_expression = (AstExpression *) Sym(3);
Sym(1) = p;
}
//
// Rule 284: ExclusiveOrExpression -> AndExpression
//
// void NoAction(void);
//
//
// Rule 285: ExclusiveOrExpression ::= ExclusiveOrExpression XOR AndExpression
//
#line 4474 "java.g"
void Parser::Act285(void)
{
AstBinaryExpression *p = ast_pool -> NewBinaryExpression(AstBinaryExpression::XOR);
p -> left_expression = (AstExpression *) Sym(1);
p -> binary_operator_token = Token(2);
p -> right_expression = (AstExpression *) Sym(3);
Sym(1) = p;
}
//
// Rule 286: InclusiveOrExpression -> ExclusiveOrExpression
//
// void NoAction(void);
//
//
// Rule 287: InclusiveOrExpression ::= InclusiveOrExpression OR ExclusiveOrExpression
//
#line 4491 "java.g"
void Parser::Act287(void)
{
AstBinaryExpression *p = ast_pool -> NewBinaryExpression(AstBinaryExpression::IOR);
p -> left_expression = (AstExpression *) Sym(1);
p -> binary_operator_token = Token(2);
p -> right_expression = (AstExpression *) Sym(3);
Sym(1) = p;
}
//
// Rule 288: ConditionalAndExpression -> InclusiveOrExpression
//
// void NoAction(void);
//
//
// Rule 289: ConditionalAndExpression ::= ConditionalAndExpression AND_AND InclusiveOrExpression
//
#line 4508 "java.g"
void Parser::Act289(void)
{
AstBinaryExpression *p = ast_pool -> NewBinaryExpression(AstBinaryExpression::AND_AND);
p -> left_expression = (AstExpression *) Sym(1);
p -> binary_operator_token = Token(2);
p -> right_expression = (AstExpression *) Sym(3);
Sym(1) = p;
}
//
// Rule 290: ConditionalOrExpression -> ConditionalAndExpression
//
// void NoAction(void);
//
//
// Rule 291: ConditionalOrExpression ::= ConditionalOrExpression OR_OR ConditionalAndExpression
//
#line 4525 "java.g"
void Parser::Act291(void)
{
AstBinaryExpression *p = ast_pool -> NewBinaryExpression(AstBinaryExpression::OR_OR);
p -> left_expression = (AstExpression *) Sym(1);
p -> binary_operator_token = Token(2);
p -> right_expression = (AstExpression *) Sym(3);
Sym(1) = p;
}
//
// Rule 292: ConditionalExpression -> ConditionalOrExpression
//
// void NoAction(void);
//
//
// Rule 293: ConditionalExpression ::= ConditionalOrExpression QUESTION Expression COLON ConditionalExpression
//
#line 4542 "java.g"
void Parser::Act293(void)
{
AstConditionalExpression *p = ast_pool -> NewConditionalExpression();
p -> test_expression = (AstExpression *) Sym(1);
p -> question_token = Token(2);
p -> true_expression = (AstExpression *) Sym(3);
p -> colon_token = Token(4);
p -> false_expression = (AstExpression *) Sym(5);
Sym(1) = p;
}
//
// Rule 294: AssignmentExpression -> ConditionalExpression
//
// void NoAction(void);
//
//
// Rule 295: AssignmentExpression -> Assignment
//
// void NoAction(void);
//
//
// Rule 296: Assignment ::= LeftHandSide AssignmentOperator AssignmentExpression
//
#line 4565 "java.g"
void Parser::Act296(void)
{
AstAssignmentExpression *p = (AstAssignmentExpression *) Sym(2);
p -> left_hand_side = (AstExpression *) Sym(1);
p -> expression = (AstExpression *) Sym(3);
Sym(1) = p;
}
//
// Rule 297: LeftHandSide -> Name
//
// void NoAction(void);
//
//
// Rule 298: LeftHandSide -> FieldAccess
//
// void NoAction(void);
//
//
// Rule 299: LeftHandSide -> ArrayAccess
//
// void NoAction(void);
//
//
// Rule 300: AssignmentOperator ::= EQUAL
//
#line 4589 "java.g"
void Parser::Act300(void)
{
Sym(1) = ast_pool -> NewAssignmentExpression(AstAssignmentExpression::SIMPLE_EQUAL, Token(1));
}
//
// Rule 301: AssignmentOperator ::= MULTIPLY_EQUAL
//
#line 4598 "java.g"
void Parser::Act301(void)
{
Sym(1) = ast_pool -> NewAssignmentExpression(AstAssignmentExpression::STAR_EQUAL, Token(1));
}
//
// Rule 302: AssignmentOperator ::= DIVIDE_EQUAL
//
#line 4607 "java.g"
void Parser::Act302(void)
{
Sym(1) = ast_pool -> NewAssignmentExpression(AstAssignmentExpression::SLASH_EQUAL, Token(1));
}
//
// Rule 303: AssignmentOperator ::= REMAINDER_EQUAL
//
#line 4616 "java.g"
void Parser::Act303(void)
{
Sym(1) = ast_pool -> NewAssignmentExpression(AstAssignmentExpression::MOD_EQUAL, Token(1));
}
//
// Rule 304: AssignmentOperator ::= PLUS_EQUAL
//
#line 4625 "java.g"
void Parser::Act304(void)
{
Sym(1) = ast_pool -> NewAssignmentExpression(AstAssignmentExpression::PLUS_EQUAL, Token(1));
}
//
// Rule 305: AssignmentOperator ::= MINUS_EQUAL
//
#line 4634 "java.g"
void Parser::Act305(void)
{
Sym(1) = ast_pool -> NewAssignmentExpression(AstAssignmentExpression::MINUS_EQUAL, Token(1));
}
//
// Rule 306: AssignmentOperator ::= LEFT_SHIFT_EQUAL
//
#line 4643 "java.g"
void Parser::Act306(void)
{
Sym(1) = ast_pool -> NewAssignmentExpression(AstAssignmentExpression::LEFT_SHIFT_EQUAL, Token(1));
}
//
// Rule 307: AssignmentOperator ::= RIGHT_SHIFT_EQUAL
//
#line 4652 "java.g"
void Parser::Act307(void)
{
Sym(1) = ast_pool -> NewAssignmentExpression(AstAssignmentExpression::RIGHT_SHIFT_EQUAL, Token(1));
}
//
// Rule 308: AssignmentOperator ::= UNSIGNED_RIGHT_SHIFT_EQUAL
//
#line 4661 "java.g"
void Parser::Act308(void)
{
Sym(1) = ast_pool -> NewAssignmentExpression(AstAssignmentExpression::UNSIGNED_RIGHT_SHIFT_EQUAL, Token(1));
}
//
// Rule 309: AssignmentOperator ::= AND_EQUAL
//
#line 4670 "java.g"
void Parser::Act309(void)
{
Sym(1) = ast_pool -> NewAssignmentExpression(AstAssignmentExpression::AND_EQUAL, Token(1));
}
//
// Rule 310: AssignmentOperator ::= XOR_EQUAL
//
#line 4679 "java.g"
void Parser::Act310(void)
{
Sym(1) = ast_pool -> NewAssignmentExpression(AstAssignmentExpression::XOR_EQUAL, Token(1));
}
//
// Rule 311: AssignmentOperator ::= OR_EQUAL
//
#line 4688 "java.g"
void Parser::Act311(void)
{
Sym(1) = ast_pool -> NewAssignmentExpression(AstAssignmentExpression::IOR_EQUAL, Token(1));
}
//
// Rule 312: Expression -> AssignmentExpression
//
// void NoAction(void);
//
//
// Rule 313: ConstantExpression -> Expression
//
// void NoAction(void);
//
//
// Rule 314: PackageDeclarationopt ::=
//
#line 4711 "java.g"
//
// Given a rule of the form A ::= x1 x2 ... xn
//
// Construct a NULL Ast for A.
//
void Parser::NullAction(void) { Sym(1) = NULL; }
//
// Rule 315: PackageDeclarationopt -> PackageDeclaration
//
// void NoAction(void);
//
//
// Rule 316: Superopt ::=
//
// void NullAction(void);
//
//
// Rule 317: Superopt -> Super
//
// void NoAction(void);
//
//
// Rule 318: Expressionopt ::=
//
// void NullAction(void);
//
//
// Rule 319: Expressionopt -> Expression
//
// void NoAction(void);
//
//
// Rule 320: ClassBodyopt ::=
//
// void NullAction(void);
//
//
// Rule 321: ClassBodyopt -> ClassBody
//
// void NoAction(void);
//
//
// Rule 322: ,opt ::=
//
// void NullAction(void);
//
//
// Rule 323: ,opt -> COMMA
//
// void NoAction(void);
//
//
// Rule 324: ImportDeclarationsopt ::=
//
// void NullAction(void);
//
//
// Rule 325: ImportDeclarationsopt -> ImportDeclarations
//
// void NoAction(void);
//
//
// Rule 326: TypeDeclarationsopt ::=
//
// void NullAction(void);
//
//
// Rule 327: TypeDeclarationsopt -> TypeDeclarations
//
// void NoAction(void);
//
//
// Rule 328: ClassBodyDeclarationsopt ::=
//
// void NullAction(void);
//
//
// Rule 329: ClassBodyDeclarationsopt -> ClassBodyDeclarations
//
// void NoAction(void);
//
//
// Rule 330: Modifiersopt ::=
//
// void NullAction(void);
//
//
// Rule 331: Modifiersopt -> Modifiers
//
// void NoAction(void);
//
//
// Rule 332: BlockStatementsopt ::=
//
// void NullAction(void);
//
//
// Rule 333: BlockStatementsopt -> BlockStatements
//
// void NoAction(void);
//
//
// Rule 334: Dimsopt ::=
//
// void NullAction(void);
//
//
// Rule 335: Dimsopt -> Dims
//
// void NoAction(void);
//
//
// Rule 336: ArgumentListopt ::=
//
// void NullAction(void);
//
//
// Rule 337: ArgumentListopt -> ArgumentList
//
// void NoAction(void);
//
//
// Rule 338: Throwsopt ::=
//
// void NullAction(void);
//
//
// Rule 339: Throwsopt -> Throws
//
// void NoAction(void);
//
//
// Rule 340: FormalParameterListopt ::=
//
// void NullAction(void);
//
//
// Rule 341: FormalParameterListopt -> FormalParameterList
//
// void NoAction(void);
//
//
// Rule 342: Interfacesopt ::=
//
// void NullAction(void);
//
//
// Rule 343: Interfacesopt -> Interfaces
//
// void NoAction(void);
//
//
// Rule 344: InterfaceMemberDeclarationsopt ::=
//
// void NullAction(void);
//
//
// Rule 345: InterfaceMemberDeclarationsopt -> InterfaceMemberDeclarations
//
// void NoAction(void);
//
//
// Rule 346: ForInitopt ::=
//
// void NullAction(void);
//
//
// Rule 347: ForInitopt -> ForInit
//
// void NoAction(void);
//
//
// Rule 348: ForUpdateopt ::=
//
// void NullAction(void);
//
//
// Rule 349: ForUpdateopt -> ForUpdate
//
// void NoAction(void);
//
//
// Rule 350: ExtendsInterfacesopt ::=
//
// void NullAction(void);
//
//
// Rule 351: ExtendsInterfacesopt -> ExtendsInterfaces
//
// void NoAction(void);
//
//
// Rule 352: Catchesopt ::=
//
// void NullAction(void);
//
//
// Rule 353: Catchesopt -> Catches
//
// void NoAction(void);
//
//
// Rule 354: PackageHeaderMarker ::=
//
#line 4892 "java.g"
//
// When this function is invoked, if the "parse_package_header_only" flag
// is turned on, we skip to the end-of-file token.
//
void Parser::Act354(void)
{
if (parse_package_header_only)
lex_stream -> Reset(lex_stream -> NumTokens() - 1); // point to the EOF token
Sym(1) = NULL;
}
//
// Rule 355: MethodHeaderMarker ::=
//
#line 4907 "java.g"
//
// When this function is invoked, if the "parse_header_only" flag
// is turned on, the body of the method being parsed is skipped.
//
void Parser::Act355(void)
{
if (parse_header_only)
{
TokenObject token = Token(1);
//
// If the first token immediately following the method header
// is not an open brace, then we have a syntactic error. Do
// nothing and let the error recovery take care of it.
//
if (lex_stream -> Kind(token) == TK_LBRACE)
lex_stream -> Reset(lex_stream -> MatchingBrace(token));
}
Sym(1) = NULL;
}